【问题标题】:DataGridView Search and Filter Data in C#DataGridView 在 C# 中搜索和过滤数据
【发布时间】:2014-08-30 20:48:42
【问题描述】:

我使用此代码从与 2 个表(内部联接)连接的 DataGridView 中搜索和过滤数据,但没有发生任何事情! 这是代码:

DataTable dt;
    protected void Page_Load(object sender, EventArgs e)
    {
        string sql = @"SELECT Invoice.[InvoiceID], Invoice.[CustomerID], Invoice.[Date], Invoice.[Amount], Invoice.[Paid], Invoice.[Rest], Invoice.[PaymentType], Invoice.[Shipped], Customer.[CustomerID], Customer.[Name], Customer.[Tell], Customer.[Address], Customer.[Comment] FROM [Invoice] INNER JOIN [Customer] ON Invoice.[CustomerID] = Customer.[CustomerID]";
        using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RechnungConnectionString"].ConnectionString))
        using (var cmd = new SqlCommand(sql, conn))
        {
            conn.Open();
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            dt = new DataTable();
            sda.Fill(dt);
            cmd.ExecuteNonQuery();
            GridView1.DataSource = dt;
            GridView1.DataBind();
            conn.Close();
        }
    } 
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
            DataView DV = new DataView(dt);
            DV.RowFilter = string.Format("Name LIKE '%{0}%'", TextBox1.Text);
            GridView1.DataSource = DV;

    }

这是 Asp.net 形式的 Textbox 和 Gridview:

    <asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="InvoiceID" CssClass="table table-striped table-bordered" AllowSorting="true">

如果有人知道如何解决这个问题或有更好的方法在 GridView 中搜索和过滤数据,请帮助我!

【问题讨论】:

    标签: c# asp.net search gridview datagridview


    【解决方案1】:

    试试这个:

    SqlDataAdapter sda = new SqlDataAdapter();
    DataTable dt;
    SqlCommand cmd2 = new SqlCommand();
    
    protected void Page_Load(object sender, EventArgs e)
        {
            string sql = @"SELECT Invoice.[InvoiceID], Invoice.[CustomerID], Invoice.[Date], Invoice.[Amount], Invoice.[Paid], Invoice.[Rest], Invoice.[PaymentType], Invoice.[Shipped], Customer.[CustomerID], Customer.[Name], Customer.[Tell], Customer.[Address], Customer.[Comment] FROM [Invoice] INNER JOIN [Customer] ON Invoice.[CustomerID] = Customer.[CustomerID]";
            using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RechnungConnectionString"].ConnectionString))
            using (var cmd = new SqlCommand(sql, conn))
            {
                conn.Open();
                sda.SelectCommand = cmd;
                dt = new DataTable();
                sda.Fill(dt);
                cmd.ExecuteNonQuery();
                GridView1.DataSource = dt;
                GridView1.DataBind();
                conn.Close();
            }
        } 
    
    protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
               dt = new DataTable();
    
                cmd2 =
                    new SqlCeCommand(string.Format(@"SELECT Invoice.[InvoiceID], Invoice.[CustomerID], Invoice.[Date], Invoice.[Amount], Invoice.[Paid], Invoice.[Rest], Invoice.[PaymentType], Invoice.[Shipped], Customer.[CustomerID], Customer.[Name], Customer.[Tell], Customer.[Address], Customer.[Comment] FROM [Invoice] INNER JOIN [Customer] ON Invoice.[CustomerID] = Customer.[CustomerID] where Name LIKE '%{0}%'", TextBox1.Text));
                try
                {
                    adp1.SelectCommand = cmd2;
                    adp1.Fill(dt);
    GridView1.DataSource = dt;
                }
                finally
                {
                    con.Close();
                }
    
        }
    

    如果您仍有问题,请告诉我。 (Movafagh bashi)

    【讨论】:

    • 我尝试了这个,但没有再次发生 :),并且这段代码中有一些小错误,例如(adp1 是 sda)或 TextChanged 中没有连接的 Sqlcommand! (Shoma ham hamintoor)
    • 你应该有一个连接字符串变量。但正如@SURFThru 所说,您的 page_load 事件可能会触发。检查一下。
    • 我修复了那个搜索文本框,但现在的问题是当在文本框中写入时我必须按 ENTER,你知道在 asp.net 中工作的任何事件处理程序,如 KeyPress(以 Windows 形式)吗?!
    【解决方案2】:

    马扎尔,

    您的文本框更改事件正在触发,但您的 Page_Load 触发并再次加载您的网格。如果你把它放在调试中,你会看到你的页面加载再次触发并重置你的网格,看起来过滤器从未使用过。

    如果您有预算,实施第 3 方网格控件可以添加许多过滤功能以及更多开箱即用的功能。我有一段时间没有使用标准网格,而是在我的所有站点中使用 DevExpress 网格。

    看看this link,您可以从DevExpress Grid 中获得强大的过滤功能。

    该产品可以通过您节省的小时数以及您可以为最终用户提供的一系列超棒功能来收回成本。

    【讨论】:

    • 我尝试不使用 page_load 的代码并使用 Button 在 gridView 中加载数据,但也不起作用! DevExpress 很昂贵,我正在为一小笔钱编写这个网络应用程序:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多