2014-09-23 68 views
0

Soo我试图在标题中过滤我的gridview并使用textboxes。我为每个textbox创建了一个textchanged方法。现在我想过滤gridview并绑定过滤的数据。由于某种原因,datasource在遇到textchanged方法时为空。看到我的代码如下:在标题中过滤带有文本框的gridview

<asp:GridView ID="GridView_Imported" runat="server" CssClass="GridView-Upload" Width="100%" OnRowDataBound="GridView_Imported_RowDataBound" HorizontalAlign="Center" AutoGenerateColumns="False"> 
      <Columns> 
       <asp:TemplateField> 
        <HeaderTemplate> 
         <asp:CheckBox ID="checkAll" runat="server" CssClass="checkAll" onclick="checkAll(this);" /> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:CheckBox ID="chkCtrl" runat="server" CssClass="chkCtrl" onclick="Check_Click(this)" /> 
        </ItemTemplate> 
        <HeaderStyle HorizontalAlign="Center" /> 
       </asp:TemplateField> 
       <asp:TemplateField AccessibleHeaderText="filter"> 
        <HeaderTemplate> 
         <asp:Label ID="lbArticleName" runat="server" Text="Article-Name:" CssClass="Article-Name-Label"></asp:Label> 
         <br/> 
         <asp:TextBox ID="tbFilterArticleName" runat="server" placeholder="Filter..." OnTextChanged="tbFilterArticleName_TextChanged" AutoPostBack="True"></asp:TextBox> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:Label ID="ArticleNameText" runat="server" Text='<%# Eval("Article-Name") %>'></asp:Label> 
        </ItemTemplate> 
        <HeaderStyle HorizontalAlign="Center" /> 
       </asp:TemplateField> 

       <asp:TemplateField> 
        <HeaderTemplate> 
         <asp:Label ID="lbArticle" runat="server" Text="Article:" CssClass="Article-Label"></asp:Label> 
         <br/> 
         <asp:TextBox ID="tbFilterArticle" runat="server" placeholder="Filter..." OnTextChanged="tbFilterArticle_TextChanged" AutoPostBack="True"></asp:TextBox> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lbArticleText" runat="server" Text='<%# Eval("Article") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <HeaderTemplate> 
         <asp:Label ID="lbWarehouse" runat="server" Text="Warehouse:" CssClass="Warehouse-Label"></asp:Label> 
         <br/> 
         <asp:TextBox ID="tbFilterWarehouse" runat="server" placeholder="Filter..." OnTextChanged="tbFilterWarehouse_TextChanged" AutoPostBack="True"></asp:TextBox> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lbWarehouseText" runat="server" Text='<%# Eval("Warehouse") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <HeaderTemplate> 
         <asp:Label ID="lbLocation" runat="server" Text="Location:" CssClass="Location-Label"></asp:Label> 
         <br/> 
         <asp:TextBox ID="tbFilterLocation" runat="server" placeholder="Filter..." OnTextChanged="tbFilterLocation_TextChanged" AutoPostBack="True"></asp:TextBox> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lbLocationText" runat="server" Text='<%# Eval("Location") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 

      </Columns> 

      <HeaderStyle HorizontalAlign="Center" /> 
      <RowStyle HorizontalAlign="Center" /> 

     </asp:GridView> 

     protected void tbFilterArticleName_TextChanged(object sender, EventArgs e) 
     { 
      var tb = (TextBox) sender as TextBox; 

      GridView_Imported.DataSource = (Session["dataSource"] as DataTable).DefaultView.RowFilter = string.Format("Article-Name LIKE '%{0}%'", tb.Text.Trim()); 


      GridView_Imported.DataBind(); 
     } 

我失踪了什么?

回答

0

你的代码有两个错误。

首先将栏名称Article-Name放在括号中作为[Article-Name]。

其次,您将数据源分配给gridview。请参阅下面的正确方法。

 var dt = (Session["dataSource"] as DataTable); 
     dt.DefaultView.RowFilter = string.Format("[Article-Name] LIKE '%{0}%'", tb.Text.Trim()); 
     GridView_Imported.DataSource = dt; 
     GridView_Imported.DataBind(); 
+0

由于某些原因,有0行代码已达到。也许它更好地获取当前显示在gridview上的数据? – user1746378 2014-09-24 12:43:22

0

使用http://www.datatables.net/

它提供的数据筛选,排序,分页等

只要将一个HTML表头你的GridView上面有一些ID

<HeaderTemplate> 
    <table id="tblData" border="0" cellpadding="5" cellspacing="1" width="100%"> 
    <thead> 
     <th align="center" width="3%">S.No.&nbsp; 
     </th> 
     <th align="center" width="10%">RFQ ID &nbsp; 
     </th> 
    </thead> 
</HeaderTemplate> 

添加添加jQuery脚本

$(document).ready(function() { 
    $('#tblData').DataTable(); 
}); 
0

首先,在你的GridView的RowDataBound事件(找到你的文本框):

System.Web.UI.WebControls.TextBox tbFilterArticle; 
    protected void GridView_Imported_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (GridView_Imported.HeaderRow != null) 
     { 
      tbFilterArticle = (System.Web.UI.WebControls.TextBox)GridView_Imported.HeaderRow.FindControl("tbSearchUser"); 
     } 
    } 

之后,使用它的值(任何你想要的,我用它变成一个按钮单击事件):

string article = tbFilterArticle.Text; 
相关问题