我正在尝试从Datagrid中删除行。我使用Ilist作为数据源。我已经在DataGrid_Rowdeleting事件中初始化了IList对象,但是同样的异常却让我很难受。请帮帮我。 我的代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
IList lst = new ArrayList();
Session["lst"] = lst;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Class1 c = new Class1();
c.product = txtName.Text;
c.quantity = txtQty.Text;
IList lst = (IList)Session["lst"];
lst.Add(c);
GridView1.DataSource = lst;
GridView1.DataBind();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
DataTable dt = new DataTable();
dt = (DataTable)GridView1.DataSource;
dt.Rows.RemoveAt(e.RowIndex);
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
答案 0 :(得分:1)
问题出在这里:
dt = (DataTable)GridView1.DataSource;
仅当在页面生命周期的先前步骤中明确设置时, DataSource
才为空。在你的情况下,它在回发期间没有设置(由delete命令触发),因此DataSource
为空。
正确处理此问题的方法是在数据库中运行必要的删除查询,检索更新的信息并重新绑定网格。
答案 1 :(得分:0)
试试这个
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
IList lst = (IList)Session["lst"];
lst .RemoveAt(e.RowIndex);
GridView1.DataSource = lst ;
GridView1.DataBind();
}