首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataRow的空引用

DataRow的空引用
EN

Stack Overflow用户
提问于 2012-03-26 09:59:48
回答 3查看 798关注 0票数 2

我在代码行中得到一个空引用:

代码语言:javascript
复制
 **DataRow dr = tableSelectedItems.NewRow();**

我找不出原因。有人能帮我吗?我的代码应该填充用户在datalist中选择的书籍。这是为了了解Sessionstate是如何工作的。我用了德文版本的"ASP.NET 3.5一步一步“一书。我的代码与它们完全相同,但我使用的是.net 4.0而不是3.5。有人能帮帮我吗?DatalistItemdCommand的所有代码是:

代码语言:javascript
复制
      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();
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-26 10:05:12

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

代码语言:javascript
复制
DataTable tableSelectedItems;
object otabSelItems  = Session["tableSelectedItems"];

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

无论如何,您必须记住,如果用户没有设置cookie启用,或者会话有超时,则该变量将始终为空

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

票数 3
EN

Stack Overflow用户

发布于 2012-03-26 10:04:53

代码语言:javascript
复制
tableSelectedItems = (DataTable)Session["tableSelectedItems"];       

这一行可能是问题所在,因为如果会话“tableSelectedItems”为null,那么tableSelectedItems也将为null。

票数 0
EN

Stack Overflow用户

发布于 2012-03-26 10:39:45

@亚里士多德是对的。还有其他guyz too..its一个简单的检查..。我的意见也是增加这一行

tableSelectedItems.AcceptChanges();

在表中添加行后.即tableSelectedItems.Rows.Add(dr);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9870105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档