Reputation: 11972
Using VB.Net (Windows Application)
I am using checkbox in the girdview column, now i want to add a checkbox in the header.
If i select the checkbox in the header, all the checkbox in the column should select automatically.
How to do this.
Need VB.Net Code Help
Upvotes: 0
Views: 18683
Reputation: 94645
Add the first Checkbox (Handle CheckedChanged
event and set AutoPostBack=True
) in HeaderTemplate
and add second checkbox in ItemTemplate
of TemplateField
.
Markup
<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>
Code-Behind
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
Upvotes: 6
Reputation: 15217
You need to use Header template in order to render a checkbox. And you will need to some javascript to check all the rows when header checked.
Upvotes: 0
Reputation: 98750
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
I'm not sure this code is well-written. I just convert from this C# code (which is working);
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;
}
}
Algorithm is simple. Define a boolean value for checking checkboxes are selected or not. If checked assign it true. for all gridview rows, find controls with columns name then set them all.
Upvotes: 2