DataRow的空引用

时间:2012-03-26 09:59:49

标签: c# asp.net

我在此代码行中获得了null引用:

 **DataRow dr = tableSelectedItems.NewRow();**

我找不到原因。有人可以帮我吗? 我的代码应该填写用户在数据列表中选择的书籍。这是为了了解Sessionstate的工作原理。我在德语版本中使用了“ASP.NET 3.5 Step by Step”一书。我有完全相同的代码,但我使用.net 4.0而不是3.5。 可以请有人帮帮我吗? DatalistItemdCommand的所有代码都是:

      protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        int nItemIndex = e.Item.ItemIndex;
        this.DataList1.SelectedIndex = nItemIndex;

        BindToinventory();

        //Row's Order: ID, Title, FirstName, LastName, Topic, Publisher

        DataTable dt = (DataTable)DataList1.DataSource;
        string strID = (dt.Rows[nItemIndex][0]).ToString();
        string strTitle = (dt.Rows[nItemIndex][1]).ToString();
        string strAuthorLastName = (dt.Rows[nItemIndex][2]).ToString();
        string strAuthorFirstName = (dt.Rows[nItemIndex][3]).ToString();
        string strTopic = (dt.Rows[nItemIndex][4]).ToString();
        string strPublisher = (dt.Rows[nItemIndex][5]).ToString();

        DataTable tableSelectedItems;
        tableSelectedItems = (DataTable)Session["tableSelectedItems"];

        //Null Reference is here
        DataRow dr = tableSelectedItems.NewRow();
        dr[0] = strID;
        dr[1] = strTitle;
        dr[2] = strAuthorLastName;
        dr[3] = strAuthorFirstName;
        dr[4] = strTopic;
        dr[5] = strPublisher;

        tableSelectedItems.Rows.Add(dr);

        Session["tableSelectedItems"] = tableSelectedItems;

        this.GridView1.DataSource = tableSelectedItems;
        this.GridView1.DataBind();
    }
}

3 个答案:

答案 0 :(得分:3)

您尝试使用会话而不首先为其设置值/或此会话的值不是相同的数据类型。我建议更改为此代码:

DataTable tableSelectedItems;
object otabSelItems  = Session["tableSelectedItems"];

if(otabSelItems is DataTable)
   tableSelectedItems = (DataTable)otabSelItems;
else
   tableSelectedItems = new DataTable();

你必须记住,如果用户没有设置cookie启用,或者会话有超时时间,此变量将始终为null

如果cookie关闭,为什么会话将始终为null?因为会话变量与cookie相关联。如果用户关闭了cookie,则在每次重新加载时都会创建一个新cookie,并且应用程序无法知道以前的cookie,也无法将此前用户与该用户连接并创建新会话。

答案 1 :(得分:0)

tableSelectedItems = (DataTable)Session["tableSelectedItems"];       

这一行可能是问题,因为如果session [“tableSelectedItems”]为null,那么tableSelectedItems也将为null。

答案 2 :(得分:0)

@Aristos是对的..还有其他的家伙..一个简单的检查.. 我的意见是添加这一行

<强> tableSelectedItems.AcceptChanges();

在table..i.e中添加行后

tableSelectedItems.Rows.Add(DR);