C# 是否可以在文本框中将数据表设置为自动完成源?(C)
是否可以在文本框中将数据表设置为自动完成源?是的 下面是一个使用类型化数据集和两个文本框的示例…滚动顶部的大图像以获取代码C# 是否可以在文本框中将数据表设置为自动完成源?(C),c#,C#,是否可以在文本框中将数据表设置为自动完成源?是的 下面是一个使用类型化数据集和两个文本框的示例…滚动顶部的大图像以获取代码 For Each store As StoreDataSet.StoreRow In StoreDataSet.Store If store.StoreID.StartsWith("0") Then StoreIDTextBox.AutoCompleteCustomSource.Add(store.StoreID.TrimStart("0"))
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
不是直接的,您需要将数据表读入一个数据库 你可以这样做:
Jared是正确的-不进行一些操作就无法直接绑定。以下是使用LINQ数据集扩展检索字段作为自动完成源的示例:
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<System.Data.DataRow, String>(x => x.Field<String>("Title"))
.ToArray();
var source = new AutoCompleteStringCollection();
source.AddRange(postSource);
textBox1.AutoCompleteCustomSource = source;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
我想你已经知道你的答案了,但是对于回答这个问题的人来说,答案是否定的。如果你有疑问,请参阅支持的选项 当涉及到在Winforms中自动完成自定义数据时,我们使用的选项只能获取或设置一个 现在,您可以通过使用所需的查询和方法从数据库获取记录来填充DataTable,然后通过迭代DataTable的元素将这些记录添加到StringCollection。下面是一个简单的例子:
谢谢你的回答。。。但对我来说,理解你的代码似乎太复杂了。。。我刚开始编程,我选择C语言学习。我还不知道如何使用LINQ。@DavidHoerster那么你怎么知道从字符串数组中选择了哪一个呢?
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<System.Data.DataRow, String>(x => x.Field<String>("Title"))
.ToArray();
var source = new AutoCompleteStringCollection();
source.AddRange(postSource);
textBox1.AutoCompleteCustomSource = source;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
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
}