【发布时间】:2011-10-10 06:29:16
【问题描述】:
使用 VB.Net(Windows 应用程序)
我在 girdview 列中使用复选框,现在我想在标题中添加一个复选框。
如果我选中标题中的复选框,则列中的所有复选框都应自动选中。
如何做到这一点。
需要 VB.Net 代码帮助
【问题讨论】:
使用 VB.Net(Windows 应用程序)
我在 girdview 列中使用复选框,现在我想在标题中添加一个复选框。
如果我选中标题中的复选框,则列中的所有复选框都应自动选中。
如何做到这一点。
需要 VB.Net 代码帮助
【问题讨论】:
在HeaderTemplate 中添加第一个 复选框(处理CheckedChanged 事件并设置AutoPostBack=True)并在ItemTemplate 的TemplateField 中添加第二个 复选框。
标记
<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
【讨论】:
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 行,找到具有列名称的控件,然后将它们全部设置。
【讨论】:
您需要使用Header template 来呈现复选框。当标题检查时,您将需要一些 javascript 来检查所有行。
【讨论】: