private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
CheckBoxList cbl=(CheckBoxList)e.Item.FindControl("Purpose");
string [] arrs=DataBinder.Eval(e.Item.DataItem,"Purpose").ToString().Split(new char[]{','});
foreach(string s in arrs)
{
cbl.Items.FindByText(s).Selected=true;
}
}
}
我照你这样写出现:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
这个错误提示?是什么原因啊!!
cbl.Items.FindByText(s).Selected=true;
红色显示在这句上面!!

解决方案 »

  1.   

    CheckBoxList cbl=(CheckBoxList)e.Item.FindControl("Purpose");
    Resonse.write(cbl);
    能输出吗?把你前台代码也贴出来.
      

  2.   

    split分割后的字符串可能有空串(比如分割前的字符串最后一个字符是",",就会出现一个""
    应该在foreach中加一个判断ListItem li = cbl.Items.FindByText(s);
    if (li != null)
    {
        li.Selected = true;
    }
      

  3.   

    如果数据库内是"aa,dd"
    而页面上只有text是aa,bb,cc的checkboxlist的选项就出现错误了
    修改成if(cbl.Items.FindByText(s)!=null)cbl.Items.FindByText(s).Selected=true;
    如果是按照value查找修改成if(cbl.Items.FindByText(s)!=null)cbl.Items.FindByValue(s).Selected=true;
      

  4.   

    如果数据库内是"aa,dd"
    而页面上只有text是aa,bb,cc的checkboxlist的选项就出现错误了
    修改成if(cbl.Items.FindByText(s)!=null)cbl.Items.FindByText(s).Selected=true;
    如果是按照value查找修改成if(cbl.Items.FindByText(s)!=null)cbl.Items.FindByValue(s).Selected=true;
      

  5.   

    public void DataGrid_ItemBound(Object sender, DataGridItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    CheckBoxList cbl=(CheckBoxList)e.Item.FindControl("Purpose");
    string [] arrs=DataBinder.Eval(e.Item.DataItem,"Purpose").ToString().Split(new char[]{','});
    foreach(string s in arrs)
    {
    if(cbl.Items.FindByText(s)!=null)cbl.Items.FindByText(s).Selected=true;
    }
    }
    }
    老大,我改成了这个样子报错是没有了,可是选项前面的勾也全部没有了??
      

  6.   

    你的Purpose怎么绑定的?
    改成FindByValue(s)试试