2014-08-30 113 views
0

我使用此代码来搜索和过滤从DataGridView连接2表(内部连接)的数据,但没有任何事情发生! 这里是代码:DataGridView搜索和筛选数据在C#

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; 

    } 

,这是文本框和GridView在Asp.net形式:

<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 PLZ帮助我!

回答

0

试试这个:

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)

+0

我试试这个,但没有发生aggain :),并且这个代码中有一些小错误,像(adp1是sda)或Sqlcommand在TextChanged中没有连接! (Shoma ham hamintoor) – 2014-08-31 06:20:18

+0

U假设有一个连接字符串变量。但正如@SURFThru所说,你的page_load事件可能会触发。核实。 – 2014-08-31 06:37:26

+0

我修复了搜索文本框,但现在的问题是,当我在文本框中写入时,我不得不按下ENTER,你是否知道任何类似KeyPress(在Windows窗体中)的事件处理程序在asp.net中工作? – 2014-08-31 09:18:14

0

Maziar,

你的文本框更改事件被解雇,但你的Page_Load火灾,并再次载入你的网格。如果你把它放在调试中,你会看到你的页面重新加载并重置你的网格,看起来像过滤器从来没有。

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

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

该产品可为您节省的小时数以及您可以为最终用户提供的一系列优秀功能付出自己的代价。

+0

我尝试我的代码没有page_load和加载数据在GridView与按钮,但不起作用! DevExpress是昂贵的,我正在写这个Web应用程序的一小笔钱:) – 2014-08-31 06:30:02