.net(C#) 未将对象引用设置到对象的实例

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:38:31
谁能帮我解决这个问题,重重有赏
前台代码:
<asp:CheckBoxList ID="CheckBoxList1" runat="server" DataSourceID="SqlDataSource3" DataTextField="TypeName" DataValueField="ID" RepeatColumns="5">
</asp:CheckBoxList><asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ConnString %>"
SelectCommand="SELECT [ID], [TypeName] FROM [MO_sort] ORDER BY [Order]"></asp:SqlDataSource>

后台代码:

protected void Page_Load(object sender, EventArgs e)
{
SetCheckBoxList(CheckBoxList1, "1,2,3");
}
protected void SetCheckBoxList(CheckBoxList cbl, string selectedItem)
{
string[] list = selectedItem.Split(new char[] { ',' });
foreach (string i in list)
{
cbl.Items.FindByValue(i).Selected

把你的代码写在CheckBoxList 的DataBound事件里。

你的调用语句不应该写在Page_Load中,因为这个时候,页面还没有加载完毕,有些控件是不可用的。

如果你把代码写到Page_LoadComplete事件中,就应该没问题了。

SetCheckBoxList(CheckBoxList1, "1,2,3");

前边加if(this.IsPostBack)return;
看看

foreach (string i in list)
{
cbl.Items.FindByValue(i).Selected = true;
}

就这段有问题 你调试一下看看i每次循环的值 能找到相应的CHECK项不
i不对,所以FindByValue的时候就找不到对象,本来这里还不会出错但是你后面.Selected 就会报错了 对一个null对象 selected 就会提示
未将对象引用设置到对象的实例

18866868说的对:
你需要在给ListItem 对象的属性赋值时,先加查他是否为null
foreach (string i in list)
{
ListItem li = cbl.Items.FindByValue(i);
if(li != null)
li.Selected = true;
}