C# 如何使用asp.net 4.0在可编辑网格视图中绑定复选框

C# 如何使用asp.net 4.0在可编辑网格视图中绑定复选框,c#,gridview,asp.net-4.0,C#,Gridview,Asp.net 4.0,我有可编辑的网格视图,其中有与数据行绑定的复选框。我把代码放在这里: protected void GV_ViewCustomers_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit) {

我有可编辑的网格视图,其中有与数据行绑定的复选框。我把代码放在这里:

 protected void GV_ViewCustomers_RowDataBound(object sender, GridViewRowEventArgs e)
    { 
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState != DataControlRowState.Edit)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            DropDownList ddl = (DropDownList)e.Row.FindControl("DDL_Types");
            ddl.DataSource = db.PartyTypes.Select(p => p).ToList();
            ddl.DataBind();
            ddl.SelectedValue = DataBinder.Eval(e.Row.DataItem, "type_id").ToString();
            DropDownList ddl1 = (DropDownList)e.Row.FindControl("DDL_CountryNames");
            ddl1.DataSource = db.Countries.Select(c => c).ToList();
            ddl1.DataBind();
            if (!string.IsNullOrEmpty(DataBinder.Eval(e.Row.DataItem, "country_id").ToString()))
            {
                ddl1.SelectedValue = DataBinder.Eval(e.Row.DataItem, "country_id").ToString();
                DropDownList ddl2 = (DropDownList)e.Row.FindControl("DDL_StateNames");
                ddl2.DataSource = db.States.Where(s => s.country_id.Equals(int.Parse(DataBinder.Eval(e.Row.DataItem, "country_id").ToString()))).Select(s => s).ToList();
                ddl2.DataBind();
                ddl2.SelectedValue = DataBinder.Eval(e.Row.DataItem, "state_id").ToString();
            }
        }
        DataRowView rowView1 = (DataRowView)e.Row.DataItem;
        if (rowView1["UserOFC"] != null)
        {
            (e.Row.FindControl("chk_UserOFC") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserOFC").ToString());
        }
        if (rowView1["UserVAT"] != null)
        {
            (e.Row.FindControl("chk_UserVAT") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserVAT").ToString());
        }
        if (rowView1["UserINV"] != null)
        {
            (e.Row.FindControl("chk_UserINV") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserINV").ToString());
        }
        if (rowView1["UserNone"] != null)
        {
            (e.Row.FindControl("chk_UserNone") as CheckBox).Checked = Convert.ToBoolean(e.Row.DataItem.Equals("UserNone").ToString());
        }
    }
    }

这是所有来自allow null data列的复选框值,因此需要从grid view row data bound中将它们绑定。

不是答案,但它应该有助于调试以了解问题所在。分离分配复选框控件的checked属性的逻辑,并使用调试器检查分配给checked属性的内容

CheckBox chk_UserOFC = e.Row.FindControl("chk_UserOFC") as CheckBox;
bool UserOFC = Convert.ToBoolean(e.Row.DataItem.Equals("UserOFC").ToString());
chk_UserOFC.Checked = UserOFC;
另外,为什么要使用e.Row.DataItem.Equals,它返回bool,然后将其转换为字符串,然后使用Convert.ToBoolean获得bool?我想你也可以用这个:

bool UserOFC = e.Row.DataItem.Equals("UserOFC");

您正在分配.Checked属性的部分看起来正常,运行该属性时是否出现异常?或者它只是不起作用?您能调试并检查分配的内容吗?分离FindControl调用以将控件分配给变量可能会有所帮助,然后分配Checked属性,看看Convert.ToBoolean调用实际分配了什么。不,它只是不起作用。如何获得绑定。@Zack你能理解这里有什么问题吗?我使用了它,但id没有帮助我。不,它出了问题,我只将true分配给了某个对象,而它却显示false。how-ever表对此具有真实值。