【发布时间】:2019-09-25 02:46:31
【问题描述】:
在我的 Winform 中,我有一个 TextBox。我将它设置为“AutoComplete”,并且我想知道在我的代码(c#)中写什么,将它的“AutoCompleteSource”设置为 DataSet 表中某些列的值。 谢谢!
【问题讨论】:
标签: c# winforms autocomplete textbox dataset
在我的 Winform 中,我有一个 TextBox。我将它设置为“AutoComplete”,并且我想知道在我的代码(c#)中写什么,将它的“AutoCompleteSource”设置为 DataSet 表中某些列的值。 谢谢!
【问题讨论】:
标签: c# winforms autocomplete textbox dataset
使用这篇文章填充数据源:
Source = dt.AsEnumerable().Select<System.Data.DataRow, String>(x => x.Field<String>("Name")).ToArray();
这会建议你
textbox.AutoCompleteCustomSource = source;
textbox.AutoCompleteMode = AutoCompleteMode.Suggest;
textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
【讨论】:
<System.Data.DataRow, String>。 2) 您的文本框将显示 Name 列的所有值列表,而 OP 期望显示所有列名的列表。
假设您在table 变量中有一个数据表,那么要将其列列表显示为自动完成源,您可以使用如下代码:
var columns = table.Columns.Cast<DataColumn>();
var source = new AutoCompleteStringCollection();
source.AddRange(columns.Select(x => x.ColumnName).ToArray());
textBox1.AutoCompleteCustomSource = source;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
但是,使用ComboBox 更有意义。要查看ComboBox 的示例,请查看this post。
【讨论】:
在代码中:
var rows = table.Rows.Cast<DataRow>();
var source = new AutoCompleteStringCollection();
source.AddRange(rows.Select(x => x.Field<String>("ColumnName")).ToArray());
textBox.AutoCompleteCustomSource = source;
textBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
只需替换 table、textBox 和 "ColumnName"。
【讨论】: