Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView Winform中的文本框自动完成_C#_.net_Winforms_Datagridview - Fatal编程技术网

C# DataGridView Winform中的文本框自动完成

C# DataGridView Winform中的文本框自动完成,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我已经将我的DataGridView绑定到我的datatable,但是我正在尝试让autocomplete对其中一个textbox列正常工作。autocomplete正在工作,但我试图将其限制为datagridview上的一列。目前,它要么对每一列都这样做,要么什么也不做。有什么想法吗?代码如下 private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEve

我已经将我的DataGridView绑定到我的datatable,但是我正在尝试让autocomplete对其中一个textbox列正常工作。autocomplete正在工作,但我试图将其限制为datagridview上的一列。目前,它要么对每一列都这样做,要么什么也不做。有什么想法吗?代码如下

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