带有SQL的复选框字段的GridView列

时间:2011-10-20 16:45:17

标签: c# asp.net sql gridview

我有2列GridView。

第一列是:test-label(TemplateField)

第二个:复选框(asp:CheckBoxField),用位列(已完成)连接到sql表。

我希望在页面加载时 - 页面将检查每一行,其中checkbox = true,test-label.visble将为false。

我知道如何使用SELECT语句编写代码来检查SQL表中的值,但是不知道如何在页面加载时检查gridview上的每一行。

我该怎么做?

(我不能使用findcontroll作为复选框,因为它是复选框,而不仅仅是“复选框”。

<asp:CheckBoxField DataField="done" SortExpression="done" HeaderText="done?" /> 

所以,我能在这做什么?也许用常规cb替换那个字段? (我不知道怎么做databind - 在常规的cb上)。

2 个答案:

答案 0 :(得分:2)

您可以使用GridView.RowDataBound Event

所以你可以做点什么

 protected void GVRowDataBound(object sender, GridViewRowEventArgs e)
        {
            var check = (CheckBox) e.Row.FindControl("ID"); // ID is id of the checkbox
            var lable = (Label) e.Row.FindControl("LableID");
            if(check != null && lable != null)
            {
                if(check.Checked)
                {
                    lable.Visible = false;
                }
            }
         }

答案 1 :(得分:2)

您无法在Page.Load中执行此操作,因为GridView尚未数据绑定。

尝试处理GridView.RowDataBound

代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox cb = (CheckBox)e.Row.FindControl("checkbox");
        Label lbl = (Label)e.Row.FindControl("test-label");
        lbl.Visible = !(cb.Checked);
    }
}