键入时来自 SQL Server 的 C# 文本框值

标签 c# sql-server

我正在为我兄弟的商店中的用户创建一个 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/

相关文章:

c# - ObjectIDGenerator 实现

c# 从文本文件中计算相同的字符串

sql - 为每个请求创建到 MS SQL 数据库的新 RJDBC 连接是否存在性能/其他缺点?

php - 如何在 PHP 中使用 PDO 从 SQL Server 数据库中获取数据并在 UTF-8 编码的 MySQL 数据库中正确编码?

sql - 四 (4) 个子查询

sql-server - "CLR Integration"是否在数据库级别或服务器/实例级别启用?

c# - Linq查询到Json字符串

c# - 我们可以在 MonoRail 中的不同操作上使用带扩展和不带扩展吗?

sql - 将 JSON 字符串转换为十进制的问题

c# - 使用 C++/CLI 的任务并行库 Task.ContinueWith