Null Reference by a DataRow
本文关键字:DataRow by Reference Null | 更新日期: 2023-09-27 18:29:04
我在代码行中得到一个空引用:
**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();
}
}
您尝试使用out的会话。首先为其设置值/或此会话的值不是相同的数据类型。我建议改成这个代码:
DataTable tableSelectedItems;
object otabSelItems = Session["tableSelectedItems"];
if(otabSelItems is DataTable)
tableSelectedItems = (DataTable)otabSelItems;
else
tableSelectedItems = new DataTable();
无论如何,您必须记住,如果用户没有设置cookie enable,或者会话超时,则此变量将始终为null。
如果cookie关闭,为什么会话总是为空?因为会话变量与cookie相关联。如果用户关闭了cookie,则在每次重新加载时都会创建一个新的cookie,并且应用程序无法知道以前的cookie,也无法将以前的会话与该用户连接并创建新的会话。
tableSelectedItems = (DataTable)Session["tableSelectedItems"];
这一行可能是问题所在,因为如果会话["tableSelectedItems"]为null,那么tableSelectedItemss也将为null。
@阿里斯托斯是对的。。还有其他人。。这是一个简单的检查。。我的意见是把这行也加上
tableSelectedItems.AcceptChanges()
在表中添加行之后。。即tableSelectedItems.Rows.Add(dr);