![](/img/trans.png)
[英]How to populate a TextBox value when an item is selected from a 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,而不是DataGridView
的CellValidating
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.