【问题标题】:Error while doing Textbox Autocomplete in a DataGridView Winform在 DataGridView Winform 中执行文本框自动完成时出错
【发布时间】:2012-10-05 10:55:23
【问题描述】:

我在尝试为datagridviewtextboxcell 执行autocomplete 时遇到此错误specified cast is not valid。我附上了代码的快照以及stack trace。我在这里错过了什么吗?

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox prodCode = e.Control as TextBox;
        if (dataGridView1.CurrentCell.ColumnIndex == 0)
        {
            var source = new AutoCompleteStringCollection();
            String[] stringArray = newDB.CustomerTbls.Where(s => s.Status == "Active" & s.Type == "Customer").Select(s => s.Name).ToArray<string>();
            source.AddRange(stringArray);

            if (prodCode != null)
            {
                prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                prodCode.AutoCompleteCustomSource = source;
                prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource;

            }
        }
        else
            prodCode.AutoCompleteCustomSource = null;
    }

【问题讨论】:

  • 您的问题与stackoverflow.com/q/7225290/122005类似。您是否尝试过将控件实例化 TextBox prodCode = e.Control as TextBox;在 if 条件中,在检查它是否不为空之前?
  • @chridam :代码与您指定的链接中的代码相同。我尝试将控件实例化 TextBox prodCode = e.Control as TextBox;在 if 条件内,但它仍然给出相同的错误。还有其他建议吗?

标签: c# .net winforms datagridview autocomplete


【解决方案1】:

正如 decyclone 在此线程 Problem faced in AutoComplete code for TextBox 中所建议的那样,在新解决方案中创建一个新的 Windows 应用程序项目,创建一个新窗体并使用该窗体尝试以下代码,即创建一个 String[] 大小的 @ 987654324@ 行计数,然后将其添加到AutoCompleteStringCollection 对象中

AutoCompleteStringCollection data = new AutoCompleteStringCollection ();
data.AddRange(new string[]
   {
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
   });

// Create and initialize the text box
var prodCode = new TextBox
{
   AutoCompleteCustomSource = data,
   AutoCompleteMode = AutoCompleteMode.SuggestAppend,
   AutoCompleteSource = AutoCompleteSource.CustomSource,
   Location = new Point(20, 20),
   Width = ClientRectangle.Width - 40,
   Visible = true
};

看看它是否有效。如果它不起作用,那么您可以尝试本文AutoCompleteCustomSource – Specified Cast is Not Valid 中所述的替代解决方案,即将TextBox 替换为ComboBox 并将其DropDownStyle 设置为DropDown

【讨论】:

    【解决方案2】:

    我自己解决了这个问题。我尝试使用Datagridview Autocomplete 的形式是Child Form。我在上面发布的代码在new Form 中工作。所以我打开Child Form 作为一个新的Thread 并尝试运行代码并且它工作!感谢您对@chridam 的所有帮助。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      相关资源
      最近更新 更多