?? 在Session创建了一张表,然后对其进行删除某条记录得时候出问题
有一个订单
上面是订单的基本信息(OrderInformation)
中间是订单的子项信息(OrderChildInforamtion)
下面是显示添加子项得内容(GridView).
现在是在点击保存得时候,订单基本信息,与订单子项信息一起保存到数据库里去.
一个订单可以好个多子项.
现在我是这么做得.
先创建一个Table(ChildItemTable)放在Session里
代码如下:
/// <summary>
/// 写入订单详细信息
/// </summary>
/// <returns> </returns>
private void InsertChildItem()
{
if (Session[ "ChildItemTable "] == null)
{
Session[ "ChildItemTable "] = GetSaleOrderChildItemDataTable
DataTable dt = (DataTable)Session[ "ChildItemTable "];
this.InsertIntoSessionDataTable(dt);
DataBinderDataGrid(dt)
}
}
public DataTable GetSaleOrderChildItemDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add( "ID ", Type.GetType( "System.Int32 "));
dt.Columns.Add( "ChildItemNo ", Type.GetType( "System.String "));
dt.Columns.Add( "NumsUnitID ", Type.GetType( "System.Int32 "));
return dt;
}
/// <summary>
/// 把当前子项信息写入 Session
/// </summary>
/// <param name= "dt "> </param>
private void InsertIntoSessionDataTable(DataTable dt)
{
string ChildItemNo = this.txtChildItem.Text.Trim();
int NumsUnitID = int.Parse(this.ddlNumUnit.SelectedValue);
DataRow dr = dt.NewRow();
dr[ "ID "] = dt.Rows.Count; //ID号
dr[ "ChildItemNo "] = ChildItemNo;
dr[ "NumsUnitID "] = NumsUnitID;
dt.Rows.Add(dr);
}
private void DataBinderDataGrid(DataTable dt)
{
this.GridView.DataSource= dt;
this.GridView.DataBind();
}
protected void GridView1_RowDeleting(object sender, DataGridDeleteEventArgs e)
{
DataTable dt = (DataTable)Session[ "ChildItemTable "];
dt.Rows.RemoveAt(id); ///----------就是这里出错了,
DataBinderDataGrid(dt);
}
当按着顺序(4,3,2,1)来删除时没有问题
可是当我先删除 3 ,然后现在第 4 得时候就出问题
异常详细信息: System.IndexOutOfRangeException: 在位置 4 处没有任何行。
不知道这个怎么处理了,
------解决方案--------------------dt.Rows.RemoveAt(id); ///----------就是这里出错了,