C# DataGridView Winform中的文本框自动完成
我已经将我的DataGridView绑定到我的datatable,但是我正在尝试让autocomplete对其中一个textbox列正常工作。autocomplete正在工作,但我试图将其限制为datagridview上的一列。目前,它要么对每一列都这样做,要么什么也不做。有什么想法吗?代码如下C# DataGridView Winform中的文本框自动完成,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我已经将我的DataGridView绑定到我的datatable,但是我正在尝试让autocomplete对其中一个textbox列正常工作。autocomplete正在工作,但我试图将其限制为datagridview上的一列。目前,它要么对每一列都这样做,要么什么也不做。有什么想法吗?代码如下 private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEve
private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridDetail.CurrentCell.ColumnIndex == 2)
{
var source = new AutoCompleteStringCollection();
String[] stringArray = Array.ConvertAll<DataRow, String>(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;
}
}
}
private void dataGridDetail\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
如果(dataGridDetail.CurrentCell.ColumnIndex==2)
{
var source=new AutoCompleteStringCollection();
String[]stringArray=Array.ConvertAll(products.Select(),委托(DataRow行){return(String)行[“code”];});
source.AddRange(stringArray);
TextBox prodCode=e.控件作为TextBox;
if(prodCode!=null)
{
prodCode.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
prodCode.AutoCompleteCustomSource=源代码;
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<DataRow, String>(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;
}
private void dataGridDetail\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
如果(dataGridDetail.CurrentCell.ColumnIndex==2)
{
var source=new AutoCompleteStringCollection();
String[]stringArray=Array.ConvertAll(products.Select(),委托(DataRow行){return(String)行[“code”];});
source.AddRange(stringArray);
TextBox prodCode=e.控件作为TextBox;
if(prodCode!=null)
{
prodCode.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
prodCode.AutoCompleteCustomSource=源代码;
prodCode.AutoCompleteSource=AutoCompleteSource.CustomSource;
}
}否则
prodCode.AutoCompleteCustomSource=null;
}
尝试释放prodCode.AutoCompleteCustomSource
,如果它不是正确的列:
private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridDetail.CurrentCell.ColumnIndex == 2)
{
var source = new AutoCompleteStringCollection();
String[] stringArray = Array.ConvertAll<DataRow, String>(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;
}
private void dataGridDetail\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
如果(dataGridDetail.CurrentCell.ColumnIndex==2)
{
var source=new AutoCompleteStringCollection();
String[]stringArray=Array.ConvertAll(products.Select(),委托(DataRow行){return(String)行[“code”];});
source.AddRange(stringArray);
TextBox prodCode=e.控件作为TextBox;
if(prodCode!=null)
{
prodCode.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
prodCode.AutoCompleteCustomSource=源代码;
prodCode.AutoCompleteSource=AutoCompleteSource.CustomSource;
}
}否则
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<DataRow, String>(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; }
}
}
private void dataGridDetail\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
if(dataGridDetail.EditingControl.GetType()==typeof(DataGridViewTextBoxedEditingControl))
{
TextBox prodCode=e.控件作为TextBox;
如果(dataGridDetail.CurrentCell.ColumnIndex==2)
{
var source=new AutoCompleteStringCollection();
String[]stringArray=Array.ConvertAll(products.Select(),委托(DataRow行){return(String)行[“code”];});
source.AddRange(stringArray);
TextBox prodCode=e.控件作为TextBox;
if(prodCode!=null)
{
prodCode.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
prodCode.AutoCompleteCustomSource=源代码;
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<DataRow, String>(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; }
}
}
private void dataGridDetail\u EditingControlShowing(对象发送方,DataGridViewEditingControlShowingEventArgs e)
{
if(dataGridDetail.EditingControl.GetType()==typeof(DataGridViewTextBoxedEditingControl))
{
TextBox prodCode=e.控件作为TextBox;
如果(dataGridDetail.CurrentCell.ColumnIndex==2)
{
var source=new AutoCompleteStringCollection();
String[]stringArray=Array.ConvertAll(products.Select(),委托(DataRow行){return(String)行[“code”];});
source.AddRange(stringArray);
TextBox prodCode=e.控件作为TextBox;
if(prodCode!=null)
{
prodCode.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
prodCode.AutoCompleteCustom