DataGridView Winform中的文本框自动完成

我已经将DataGridView绑定正确地绑定到我的数据表但是我正在尝试使自动完成function正常工作到其中一个文本框列。 自动完成工作正在运行,但我试图将其限制为datagridview上的只有一列。 目前它要么为每一列做,要么根本没有。 有任何想法吗? 代码如下。

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dataGridDetail.CurrentCell.ColumnIndex == 2) { var source = new AutoCompleteStringCollection(); String[] stringArray = Array.ConvertAll(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); source.AddRange(stringArray); TextBox prodCode = e.Control as TextBox; if (prodCode != null) { prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; prodCode.AutoCompleteCustomSource = source; prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; } } } 

您的if条件只是检查用户当前是否选择了第三列。

您想要使所有列都可编辑吗? 或者只是当前选定行中的一个单元格? 如何通过表单中的另一个按钮触发编辑? 在这种情况下,当编辑变为活动时,可以选择任何单元格吗?

您需要索引到正确的列并将其设置为启用自动完成。

尝试释放prodCode.AutoCompleteCustomSource ,如果它不是正确的列:

 private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dataGridDetail.CurrentCell.ColumnIndex == 2) { var source = new AutoCompleteStringCollection(); String[] stringArray = Array.ConvertAll(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); source.AddRange(stringArray); TextBox prodCode = e.Control as TextBox; if (prodCode != null) { prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; prodCode.AutoCompleteCustomSource = source; prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; } }else prodCode.AutoCompleteCustomSource = null; } 

阿布琳的建议是最棒的! 我对它做了一点改进,因为else语句中的行将抛出一个类型的错误 在当前上下文中不存在

因此从他的代码:

 private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if(dataGridDetail.EditingControl.GetType()==typeof(DataGridViewTextBoxEditingControl)) { TextBox prodCode = e.Control as TextBox; if (dataGridDetail.CurrentCell.ColumnIndex == 2) { var source = new AutoCompleteStringCollection(); String[] stringArray = Array.ConvertAll(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); source.AddRange(stringArray); TextBox prodCode = e.Control as TextBox; if (prodCode != null) { prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; prodCode.AutoCompleteCustomSource = source; prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; } } else { prodCode.AutoCompleteCustomSource = null; } } }