Issue
How can I set a databound checkbox in a GridView
control? I have a checkbox in my GridView but its check status does not stay.
Solution
There are two ways to add a checkbox to a GridView
control.
Method 1: Using CheckBoxField
WorkflowPage
will automatically perform the binding. The limitation is that the GridView
column can only have the checkbox.
<asp:CheckBoxField DataField="MyCheckBox" HeaderText="Header of My Checkbox" />
Method 2: Using TemplateField
You can have a checkbox control and other controls within the same GridView
. However, there is no direct databinding to a checkbox for the GridView
dataRow
. You need to convert the data value to checkbox Boolean check state.
To manually databind a checkbox:
-
Display the checkbox status in ASPX.
-
In
aspx.cs
, capture the checkbox status inonRowUpdating
.
ASPX
Get the checkbox data and convert it to Boolean value for the checkbox status.
It converts the string value of MyCheckBox
in Boolean true/false.
In ItemTemplate
, set Enabled=false
:
<asp:TemplateField HeaderText=" Header of My Checkbox">
<EditItemTemplate>
<asp:CheckBox ID="MyCheckBox" runat="server"
Checked='<%# Eval("MyCheckBox").ToString() == "True" ? true:false %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="MyCheckBox" runat="server" Enabled="false"
Checked='<%# Eval("MyCheckBox ").ToString() == "True" ? true:false %>' />
</ItemTemplate>
</asp:TemplateField>
ASP.CS
Capture the checkbox status at RowUpdating
. Set its value in the GridView
data, which will be handled by WorkflowGen.
protected void MyGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
CheckBox chkbox =
(CheckBox)MyGridView.Rows[e.RowIndex].FindControl("MyCheckBox");
if (chkbox.Checked)
e.NewValues["MyCheckBox "] = "True";
else
e.NewValues["MyCheckBox"] = "False";
}