簡體   English   中英

專注時會清除DataGridViewComboBox的值

[英]Value for DataGridViewComboBox clears when focused

我已經實現了一個DataGridViewComboBox ,它允許使用該線程中的代碼進行編輯。

我現在的問題是,當我對單元格進行聚焦時,該值被清除了。 根據我已閱讀的帖子,必須先將該項目添加到組合框中。 這就是我嘗試過的。 你能告訴我怎么了嗎?

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
        {
            DataGridViewRow row = dataGridView1.CurrentRow;
            DataGridViewCell cell = dataGridView1.CurrentCell;

            if (cell == row.Cells[colComboBox.Name])
            {
                DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl;
                control.DropDownStyle = ComboBoxStyle.DropDown;

                //For testing purposes
                colComboBox.Items.Add("Test");//I'm adding the item to the combobox control
                row.Cells[colComboBox.Name].Value = "Test";//Then set the value of the cell based on the item I added
            }
        }
    }

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        if (e.ColumnIndex == colComboBox.Index)
        {
            colComboBox.Items.Clear();
            object eFV = e.FormattedValue;
            if (!colComboBox.Items.Contains(eFV))
            {
                colComboBox.Items.Add(eFV);
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = eFV;
            }
        }
    }

在您鏈接的示例中,使用的Validating事件是編輯組合框1,而不是DataGridViewCellValidating 1。

順便說一句,使用EditingControlShowing事件訪問編輯控件通常不是一個好主意。 我建議您通過在填充datagridview之前添加以下代碼來使用單元格模板:

DataGridViewComboBoxCell templateCell = new DataGridViewComboBoxCell();
templateCell.Items.Add("Test");
templateCell.Items.Add("Test2");
colComboBox.CellTemplate = templateCell;

我不完全確定為什么DataGridViewComboBox會這種行為。 但是嘗試使用默認屬性對ComboBox控件進行測試時,它不會在聚焦時清除該值,並且其行為類似於TextBox控件。 解決方案是將控件的Text屬性實際設置為某個全局變量,例如,可以由綁定到控件的其他事件訪問的全局變量。 至於現在,這就是我要實現的行為。

DataGridViewComboBoxEditingControl control = e.Control as DataGridViewComboBoxEditingControl;
        control.DropDownStyle = ComboBoxStyle.DropDown;
        control.Text = SomeGlobalVariable;

暫無
暫無

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

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