【问题标题】:How to make a Gridview Header Check Box如何制作 Gridview 标题复选框
【发布时间】:2011-10-10 06:29:16
【问题描述】:

使用 VB.Net(Windows 应用程序)

我在 girdview 列中使用复选框,现在我想在标题中添加一个复选框。

如果我选中标题中的复选框,则列中的所有复选框都应自动选中。

如何做到这一点。

需要 VB.Net 代码帮助

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    HeaderTemplate 中添加第一个 复选框(处理CheckedChanged 事件并设置AutoPostBack=True)并在ItemTemplateTemplateField 中添加第二个 复选框。

    标记

    <asp:GridView 
        ID="GridView1" 
        runat="server"
        AutoGenerateColumns="false"
        >
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:CheckBox 
                    ID="CheckBox1" 
                    runat="server"
                    AutoPostBack="true"
                    OnCheckedChanged="CheckUncheckAll"
                    />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox2" runat="server" /> 
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <HeaderTemplate>
                Name
            </HeaderTemplate>
            <ItemTemplate>
                <asp:Literal 
                    ID="Literal1" 
                    runat="server"
                    Text='<%#Eval("Name") %>'
                    >
                </asp:Literal>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    

    代码隐藏

      Public Class Data
            Public Property Name As String
        End Class
    
        Protected Sub CheckUncheckAll(sender As Object, e As System.EventArgs)
            Dim chk1 As CheckBox
            chk1 = DirectCast(GridView1.HeaderRow.Cells(0).FindControl("CheckBox1"),CheckBox)
            For Each row As GridViewRow In GridView1.Rows
                Dim chk As CheckBox
                chk =DirectCast(row.Cells(0).FindControl("CheckBox2"),CheckBox)
                chk.Checked = chk1.Checked
            Next
        End Sub
        Dim lst As List(Of Data)
        Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                lst = New List(Of Data)
                lst.Add(New Data() With {.Name = "A"})
                lst.Add(New Data() With {.Name = "B"})
                lst.Add(New Data() With {.Name = "C"})
    
                GridView1.DataSource = lst
                GridView1.DataBind()
            End If
        End Sub
    

    【讨论】:

      【解决方案2】:
      Protected Sub chkbSelectAll_CheckedChanged(sender As Object, e As EventArgs)
          Dim chkFlag As Boolean = False
          If chkbSelectAll.Checked Then
              chkFlag = True
          End If
          For Each dr As GridViewRow In gvProducts.Rows
              Dim chk As CheckBox = DirectCast(dr.Cells(0).FindControl("Select"), CheckBox)
              chk.Checked = chkFlag
          Next
      End Sub
      

      我不确定这段代码写得好不好。我只是从这个 C# 代码转换(正在工作);

      protected void chkbSelectAll_CheckedChanged(object sender, EventArgs e)
          {
              bool chkFlag = false;
              if (chkbSelectAll.Checked) chkFlag = true;
              foreach (GridViewRow dr in gvProducts.Rows)
              {
                  CheckBox chk = (CheckBox)dr.Cells[0].FindControl("Select");
                  chk.Checked = chkFlag;
              }
          }
      

      算法很简单。定义一个布尔值来检查复选框是否被选中。如果选中,则将其分配为 true。对于所有 gridview 行,找到具有列名称的控件,然后将它们全部设置。

      【讨论】:

        【解决方案3】:

        您需要使用Header template 来呈现复选框。当标题检查时,您将需要一些 javascript 来检查所有行。

        【讨论】:

          猜你喜欢
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-30
          • 2014-10-25
          • 2011-10-30
          • 2013-05-24
          • 2015-12-20
          相关资源
          最近更新 更多