2017-05-30 41 views
1

我在一边发现了我的问题的实现,但我不知道为什么它不工作。当我把一些值放入文本框时,它应该为我做一个回发,但它不会。AJAX asp Web表格在网格中搜索

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 
     <div> 
      <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="txt" /> 
       </Triggers> 
       <ContentTemplate> 
        <asp:TextBox runat="server" ID="TextBox1" AutoPostBack="true" OnTextChanged="txt_TextChanged"></asp:TextBox> 
        <asp:GridView runat="server" ID="GridView2"> 
         <Columns> 
          <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ItemStyle-Font-Size="10px" /> 
          <asp:BoundField DataField="regon" HeaderText="Regon" SortExpression="regon" ItemStyle-Font-Size="10px" /> 
          <asp:BoundField DataField="nip" HeaderText="NIP" SortExpression="nip" ItemStyle-Font-Size="10px" /> 
         </Columns> 
        </asp:GridView> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </div> 

而后面的代码:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txt.Attributes.Add("onkeyup", "javascript:setTimeout('__doPostBack(\'txt\',\'\')', 0)"); 
      string SelectCommand = "SELECT * " + 
       " FROM client_inf WHERE amount > 1000"; 
      conn.Open(); 
      OleDbDataAdapter da = new OleDbDataAdapter(SelectCommand, conn); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      GridView1.DataSource = ds.Tables[0]; 
      GridView1.DataBind(); 
      conn.Close(); 
     } 
    } 
    protected void txt_TextChanged(object sender, EventArgs e) 
    { 
     if (txt.Text != "") 
     { 
      string SelectCommand = "SELECT * " + 
       " FROM client_inf WHERE client_name Like '" + txt.Text + "%'" 
      conn.Open(); 
      OleDbDataAdapter da = new OleDbDataAdapter(SelectCommand, conn); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      GridView1.DataSource = ds.Tables[0]; 
      GridView1.DataBind(); 
      conn.Close(); 
     } 
    } 

http://www.infosearchshop.com/21-gridview-search-as-you-type-with-ajax

+0

请改变'内的'到'的' TextBox的ID不匹配。 – Rainmaker

回答

0

文本框的ID和GridView控件的ID不匹配。

<div> 
      <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="txt" /> 
       </Triggers> 
       <ContentTemplate> 
        <asp:TextBox runat="server" ID="txt" AutoPostBack="true" OnTextChanged="txt_TextChanged"></asp:TextBox> 
        <asp:GridView runat="server" ID="GridView1"> 
         <Columns> 
          <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ItemStyle-Font-Size="10px" /> 
          <asp:BoundField DataField="regon" HeaderText="Regon" SortExpression="regon" ItemStyle-Font-Size="10px" /> 
          <asp:BoundField DataField="nip" HeaderText="NIP" SortExpression="nip" ItemStyle-Font-Size="10px" /> 
         </Columns> 
        </asp:GridView> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </div> 


aspx.cs

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       txt.Attributes.Add("onkeyup", "javascript:setTimeout('__doPostBack(\'txt\',\'\')', 0)"); 
       GridView1.DataSource = GetDataSource(); 
       GridView1.DataBind(); 
      } 
     } 
     private DataTable GetDataSource() 
     { 
      var dt = new DataTable(); 
      dt.Columns.Add("Name", typeof(string)); 
      dt.Columns.Add("regon", typeof(string)); 
      dt.Columns.Add("nip", typeof(string)); 
      dt.Rows.Add("Name-1", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-2", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-3", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-4", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-5", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-6", "regon-1", "nip-1"); 
      dt.Rows.Add("Name-7", "regon-1", "nip-1"); 
      return dt; 
     } 
     protected void txt_TextChanged(object sender, EventArgs e) 
     { 
      if (txt.Text != "") 
      { 
       GridView1.DataSource = GetDataSource(); 
       GridView1.DataBind(); 
      } 
     } 
+0

你有权利,但它仍然无法工作 – Adriano

0

我建议更新AsyncPostBackTrigger作为跟随到textbox = TextBox1中的ID与AutoPostBack参考匹配,但该控制需要是外UpdatePanel

<asp:AsyncPostBackTrigger ControlID ="TextBox1" EventName ="TextChanged" /> 

我也建议尝试使用PostBackTrigger来代替。这是主要用于控制UpdatePanel,使一个完整讯息背面

<asp:PostBackTrigger ControlID="TextBox1" /> 
+0

'PostBackTrigger'运作良好,但我不知道为什么第一个'AsyncPostBackTrigger'不 – Adriano

+0

'PostBackTrigger'仍然重新加载我的所有页面 – Adriano

+0

从以前的经验是权衡AutoPostBack上班。我不知道这个行为的修复是什么。 –