是否可以在TextBox中将DataTable作为AutoCompleteSource? (C#)

是否可以在TextBox中将DataTable作为AutoCompleteSource? (C#)

Jared是正确的 – 如果不做一些操作就不能直接绑定。 以下是使用LINQ DataSet扩展来检索字段作为自动完成源的示例:

DataTable dtPosts = new DataTable(); using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StackOverflow"].ConnectionString)) { conn.Open(); using (SqlDataAdapter adapt = new SqlDataAdapter("SELECT TOP 100 Id, Title, Body, CreationDate FROM Posts WHERE Title IS NOT NULL ORDER BY Id", conn)) { adapt.SelectCommand.CommandTimeout = 120; adapt.Fill(dtPosts); } } //use LINQ method syntax to pull the Title field from a DT into a string array... string[] postSource = dtPosts .AsEnumerable() .Select(x => x.Field("Title")) .ToArray(); var source = new AutoCompleteStringCollection(); source.AddRange(postSource); textBox1.AutoCompleteCustomSource = source; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 

不直接,您需要将数据表读入AutoCompleteStringCollection

你可以这样做( 从这里 ):

 private AutoCompleteStringCollection GetAutoSourceCollectionFromTable(DataTable table) { AutoCompleteStringCollection autoSourceCollection = new AutoCompleteStringCollection(); foreach (DataRow row in table.Rows) { autoSourceCollection.Add(row[0]); //assuming required data is in first column } return autoSourceCollection; } 

我猜你已经知道了你的答案,但对于提出这个问题的人来说,答案是否定的,如果你有疑问,请参阅AutoCompleteSource支持的选项。

在Winforms中自动完成自定义数据时,我们使用AutoCompleteCustomSource选项,该选项只能获取或设置AutoCompleteStringCollection 。

现在,您可以通过使用所需的查询和方法从数据库中获取记录来填充DataTable ,然后可以通过迭代DataTable的DataRow元素将这些记录添加到StringCollection中。 这是Leandro Tuttini的一个简单例子:

 textBox1.AutoCompleteCustomSource = LoadAutoComplete(); //this method is below textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; public static AutoCompleteStringCollection LoadAutoComplete() { DataTable dt = LoadDataTable(); //suppose this method returns a DataTable with fetched records from database. AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection(); foreach (DataRow row in dt.Rows) { stringCol.Add(Convert.ToString(row[0])); } return stringCol; //return the string collection with added records } 

是。

下面是一个使用类型化数据集和两个文本框的示例( 源代码 …滚动到顶部的大图像以获取代码)

 For Each store As StoreDataSet.StoreRow In StoreDataSet.Store If store.StoreID.StartsWith("0") Then StoreIDTextBox.AutoCompleteCustomSource.Add(store.StoreID.TrimStart("0")) End If StoreIDTextBox.AutoCompleteCustomSource.Add(store.StoreID) StoreNameTextBox.AutoCompleteCustomSource.Add(store.StoreName) Next store