You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何绑定文本框、下拉列表与SQL数据库实现搜索填充

核心需求

在文本框中输入用户姓名关键词,点击搜索按钮后,将匹配到的用户数据填充到下拉列表中。

代码运行效果截图

现有实现代码

SQL Server 端计划使用的查询语句

SELECT Users.Forename + ' ' + Users.Surname AS [Name], Users.ID
From Users
Order by [Name]

Aspx 前端代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Page1.aspx.cs" Inherits="SearchRecords.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <p> Search User </p>
            <p> Filter Users: <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
            <asp:Button ID="SearchButton1" runat="server" Text="Search" OnClick="BtnSearch_Click" />

            <br />

            <br />
            Select a user:
            <asp:DropDownList ID="DDLSelectUser1" runat="server"> </asp:DropDownList>

           &nbsp; <asp:Label ID="lblUserCount" runat="server" Text=""></asp:Label>
            
            <br /> 
            

            <div class="DataGrid">
                <asp:GridView ID="DataGrid1" runat="server" ShowHeaderWhenEmpty="false" EmptyDataText="No data found!">

                </asp:GridView>
            </div>

            </p>

            <a href="Page1.aspx"> <p> Link to page 1 </p> </a>
        </div>
    </form>
</body>
</html>

C# 后端已编写的数据绑定方法

private void LoadIntoDropdown()
{
    using (SqlConnection connection = new SqlConnection("Data Source=DEV-WEB;Initial Catalog=Isabelle;Integrated Security=True"))
    {
        connection.Open();

        string sqlQuery = "SELECT Users.Forename + ' ' + Users.Surname AS [Name], Users.ID From Users WHERE Forename like '%'+@Forename+'%'";

        using (SqlCommand cmd = new SqlCommand(sqlQuery, connection))
        {
            cmd.Parameters.AddWithValue("Forename", TextBox1.Text);

            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();

                adapter.Fill(dt);                 

                DDLSelectUser1.DataTextField = "[Name]";

                DDLSelectUser1.DataValueField = "Users.ID";

                DDLSelectUser1.DataSource = dt;

                DDLSelectUser1.DataBind();
            }
        }

        connection.Close(); 
    }
}
运行报错信息

"DataBinding: 'System.Data.DataRowView' does not contain a property with the name '[Name]'."

错误排查与修复方案

报错核心原因是下拉列表的字段绑定配置错误:

  • SQL语句中包裹别名的方括号[]是SQL Server的转义语法,仅在SQL语句内部生效,查询填充到DataTable后,实际的列名就是Name,不包含方括号。原代码写DataTextField = "[Name]"会让程序查找字面名称为[Name]的列,自然触发找不到属性的异常。
  • 同理查询返回的ID列没有Users.前缀,DataTable中的列名就是ID,原代码写DataValueField = "Users.ID"同样找不到对应列。

修正后的绑定代码

将数据绑定部分替换为以下内容即可解决当前报错:

adapter.Fill(dt);                 

DDLSelectUser1.DataTextField = "Name";
DDLSelectUser1.DataValueField = "ID";
DDLSelectUser1.DataSource = dt;
DDLSelectUser1.DataBind();

其他需要补全的逻辑

  • 搜索按钮点击事件需要调用数据加载方法,否则点击搜索不会触发下拉列表填充,参考实现:
protected void BtnSearch_Click(object sender, EventArgs e)
{
    LoadIntoDropdown();
    // 可选:在标签上显示匹配到的用户总数
    lblUserCount.Text = $"共找到{DDLSelectUser1.Items.Count}位匹配用户";
}
  • 现有C#代码中的SQL查询缺少最初计划的排序逻辑,将sqlQuery变量替换为带排序的版本即可让返回的用户名按字母顺序排列:
string sqlQuery = "SELECT Users.Forename + ' ' + Users.Surname AS [Name], Users.ID From Users WHERE Forename like '%'+@Forename+'%' ORDER BY [Name]";
  • using代码块会在执行结束后自动释放并关闭数据库连接,不需要手动写connection.Close(),该代码属于冗余逻辑可直接删除。

内容的提问来源于stack exchange,提问作者LoaFia02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:51:24