基于 GridView 外部的复选框筛选 GridView 数据

本文关键字:GridView 筛选 数据 复选框 外部 基于 | 更新日期: 2023-09-27 18:31:42

我的页面上有 5 个复选框和一个带有模板字段的网格视图,我在页面加载时没有使用任何绑定字段,我正在将网格与表的所有数据绑定,我想根据复选框复选框过滤数据。

假设:我有像 A B C D 这样的复选框。所有复选框都位于网格视图的外侧。当用户选中复选框 A 时,然后在网格视图中,复选框 A 应显示相关数据,就像 B C 和 D 一样。

怎么做?,有人请给出一些示例代码和位逻辑。

如果我能够在没有任何回发的情况下过滤网格视图,那就太好了。

网 格:

 <asp:GridView ID="GridView1" runat="server" 
                AutoGenerateColumns="False" CellPadding="3">
      <Columns>
          <asp:TemplateField HeaderText="ID" SortExpression="ID">
            <ItemTemplate>
              <asp:Label ID="lblId" runat="server" Text='<%#Eval("Id") %>'></asp:Label>
           </ItemTemplate>                           
         </asp:TemplateField>
         <asp:TemplateField HeaderText="Discription" SortExpression="Discription">
            <ItemTemplate>
              <asp:Label ID="lblDiscription" runat="server" Text='<%#Eval("Discription") %>'></asp:Label>
            </ItemTemplate>                        
         </asp:TemplateField>
         <asp:TemplateField HeaderText="Address" SortExpression="Address">
            <ItemTemplate>
             <asp:Label ID="lblAddress" runat="server" Text='<%#Eval("Address") %>'></asp:Label>
            </ItemTemplate>
         </asp:TemplateField>
     </Columns>
 </asp:GridView>

绑定网格:

TestPageDao page1Dao = new TestPageDao ();
if (!IsPostBack)
{
  IList<TestDAO> TestDAO = page1Dao.GetAlldata();
  GridView1.DataSource = TestDAO;
  GridView1.DataBind();
}

我尝试了过滤器网格视图或 http://forums.asp.net/p/1034014/2904713.aspx

基于 GridView 外部的复选框筛选 GridView 数据

如果你想避免回发,请使用jQuery,如下所示:http://jquerybyexample.blogspot.com/2012/04/how-to-filter-gridview-records-using.html

另一种方法是 AJAX,但在故事的最后,它是一种类似回发的方法。

最后,使用回发,您可以通过多种方式执行此操作,方法是在加载 GridView 之前动态设置 GridView 筛选器。这可以通过页面加载事件、关联数据源(如果有)的 OnChoice 或类似功能来实现。

这是 aspx 的提取:

<asp:CheckBox ID="CheckBox1" runat="server" Text="A" />
<asp:CheckBox ID="CheckBox2" runat="server" Text="B" />
<asp:CheckBox ID="CheckBox3" runat="server" Text="C" />
<asp:CheckBox ID="CheckBox4" runat="server" Text="D" />
<hr />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    DataSourceID="sqlDataSourceGridView" AutoGenerateColumns="False"
    CssClass="GridViewStyle" GridLines="None" Width="650px" >
    <Columns> 
        <asp:BoundField DataField="CompanyName" HeaderText="Company" ItemStyle-Width="200px" />
        <asp:BoundField DataField="ContactName" HeaderText="Name" ItemStyle-Width="125px"/>
        <asp:BoundField DataField="City" HeaderText="city" ItemStyle-Width="125px" />
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="125px" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSourceGridView" runat="server" 
    ConnectionString="<%$ ConnectionStrings:northWindConnectionString %>" 
    SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName], [City], [Country] FROM [Customers]" 
    OnSelecting="SqlDataSourceGridView_Selecting">
 <FilterParameters>
    <asp:ControlParameter ControlID="checkbox1" Name="CompanyName" PropertyName="Checked" ConvertEmptyStringToNull="false" />
 </FilterParameters>
</asp:SqlDataSource>

请注意 OnSelect 事件,并注意没有任何筛选器预设。

现在在代码隐藏中动态设置过滤器:

protected void SqlDataSourceGridView_Selecting(object sender, SqlDataSourceSelectingEventArgs e) {
    SqlDataSourceGridView.FilterExpression = string.Empty;
    if (CheckBox1.Checked) {
        SqlDataSourceGridView.FilterExpression += "(CompanyName=1)";
    }
    if (CheckBox2.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(B=1)";
    }
    if (CheckBox3.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(C=1)";
    }
    if (CheckBox4.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(D=1)";
    }
}

如果您不喜欢 OnSelect 事件,可以在 PageLoad 中执行相同的操作:

protected void Page_Load(object sender, EventArgs e) {
    // here same code of above
    // . . .
}

我没有测试它,所以验证小错误。