簡體   English   中英

時間:2019-05-09 標簽:c#datagridcomboboxgetvalueselected

[英]c# datagrid combobox getvalue selected

我有一個帶組合框的數據網格,我想獲得我的價值,我可以得到它,但我不知道為什么,我得到了 4 次??? 有人可以幫我嗎?

這是我的代碼:

    private void dgvLocataire_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                dgvLocataire.BeginEdit(false);

                var ec = dgvLocataire.EditingControl as DataGridViewComboBoxEditingControl;
                if (ec != null && ec.Width - e.X < SystemInformation.VerticalScrollBarWidth)
                    ec.DroppedDown = true;

                if ((e.ColumnIndex != 3) && (e.ColumnIndex != 4))
                {
                    dgvLocataire.Columns[e.ColumnIndex].ReadOnly = true;
                }

                dgvLocataire.CellValueChanged +=
                 new DataGridViewCellEventHandler(dgvLocataire_CellValueChanged);
                //dgvLocataire.CurrentCellDirtyStateChanged +=
                             //new EventHandler(dgvLocataire_CurrentCellDirtyStateChanged);

            }

    private void dgvLocataire_CurrentCellDirtyStateChanged(object sender, EventArgs e)
            {
                dgvLocataire.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }


    private void dgvLocataire_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                string comboboxSelectedValue = string.Empty;

                if (dgvLocataire.Columns[e.ColumnIndex].GetType() == typeof(DataGridViewComboBoxColumn))
                    comboboxSelectedValue = dgvLocataire.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

                MessageBox.Show(comboboxSelectedValue);
            }

當我在組合框中選擇一個值時,消息框出現 4 次。 謝謝你的幫助

dgvLocataire_CellMouseClick方法中,每次單擊時都訂閱了dgvLocataire_CellValueChanged 這意味着它可以被多次調用 => MessageBox.Show(comboboxSelectedValue) 被多次調用。

您只應在此表單初始化時訂閱此事件一次。

我這樣變

private void dgvLocataire_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            dgvLocataire.BeginEdit(false);


            var ec = dgvLocataire.EditingControl as DataGridViewComboBoxEditingControl;
            if (ec != null && ec.Width - e.X < SystemInformation.VerticalScrollBarWidth)
                ec.DroppedDown = true;

            if ((e.ColumnIndex != 3) && (e.ColumnIndex != 4))
            {
                dgvLocataire.Columns[e.ColumnIndex].ReadOnly = true;
            }

        }

private void dgvLocataire_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            ComboBox cb = e.Control as ComboBox;
            if (cb != null)
            {
                cb.SelectionChangeCommitted -= new EventHandler(ComboBox_SelectedIndexChanged);

                // now attach the event handler
                cb.SelectionChangeCommitted += new EventHandler(ComboBox_SelectedIndexChanged);
            }
        }

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            string item = cb.Text;
            if (item != null)
                MessageBox.Show(item);
        }
`
but now i dont get the messagebox to show ???
any help ?
Thanks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM