我正在为我兄弟的商店中的用户创建一个 C# 应用程序。
我有一个 SQL Server 数据库,用于存储所有已售商品,这些商品是从应用程序添加的。
当用户在应用程序的“CustomerName”字段中输入文本时,我希望它执行数据库调用并检查具有相同客户名称(或到目前为止已输入的名称)的任何先前销售,并且在文本框中填写名称。
我遇到的问题是:如果有一个叫 John 的客户和另一个叫 Joe 的客户,我需要选择 John,如果我在框中输入 J,它只会选择 Joe,然后将文本光标返回到文本框的开头相当烦人和不方便。
理想的解决方案是,如果我在文本框中输入 J,则文本框正下方会出现一个下拉框,显示所有带有 J 的客户,允许用户选择一个客户,然后在文本框中填写值。如果我然后输入 Jo,Jo 的所有记录都会出现在下拉列表等中。
编码部分不应该成为问题(希望),我只是想知道解决这个问题的最佳方法。
最佳答案
首先在文本框中添加/更改这些属性
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
那么您可以使用此方法获取以您的前缀开头的客户名称列表。
public List<string> GetCustomerInfo(string custName)
{
List<string> result = new List<string>();
string sql = "Select Name from Customers Where Name like @partName";
using(SqlConnection con = GetConnection())
using(SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
cmd.Parameters.AddWithValue("@partName", custName + "%");
using(SqlDataReader r = cmd.ExecuteReader())
{
while(r.Read())
{
if(!r.IsDbNull(0))
result.Add(r.GetString(0));
}
}
}
return result;
}
作为保障措施,我将检查您的组合框中输入的文本是否至少为三个字符
if(textBox1.Text.Length >= 3)
textBox1.AutoCompleteCustomSource = GetCustomerInfo(textBox1.Text);
else
textBox1.AutoCompleteCustomSource = null;
关于键入时来自 SQL Server 的 C# 文本框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858434/