删除 DataSet 数据时的问题:
―――――――――――――――――――――――――――――――――――――――――――――――
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace TestDelDataset


{

/**////?
????///?WebForm1?的摘要说明。
????///?
public class?WebForm1 : System.Web.UI.Page

{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected?SqlDataAdapter?adapter;
protected?SqlConnection?myConnection;
protected?DataSet?ds;
protected?DataTable?dt;
protected?DataRow?dr;

private?void?Page_Load(object?sender,?System.EventArgs?e)

{
?在此处放置用户代码以初始化页面
if(!Page.IsPostBack)

{
BindData();
}
}
private void BindData()

{
myConnection = new SqlConnection("server=localhost;database=Northwind;Trusted_Connection=yes;user id=sa;password=;");
adapter=new SqlDataAdapter("select * from Categories",myConnection);
ds=new DataSet();
adapter.Fill(ds,"Categories");
dt=ds.Tables["Categories"];
this.DataGrid1.DataSource=dt.DefaultView;
this.DataGrid1.DataBind();
ViewState["dt"]=dt;
ViewState["pk"]=dt.PrimaryKey;
}


Web?窗体设计器生成的代码#region?Web?窗体设计器生成的代码
override protected void?OnInit(EventArgs e)

{
//
????????????//?CODEGEN:?该调用是?ASP.NET?Web?窗体设计器所必需的。
????????????//
InitializeComponent();
base.OnInit(e);
}

**////?
????????///?设计器支持所需的方法?-?不要使用代码编辑器修改
????????///?此方法的内容。
????????///?
private void InitializeComponent()

{
this.DataGrid1.DeleteCommand += new?System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_Delete);
this.DataGrid1.SelectedIndexChanged += new?System.EventHandler(this.DataGrid1_SelectedIndexChanged);
this.Load += new?System.EventHandler(this.Page_Load);

}
#endregion

public?void?DataGrid1_SelectedIndexChanged(object?sender,?System.EventArgs?e)

{
}
public void DataGrid1_Delete(object sender,DataGridCommandEventArgs e)

{
try

{
DataTable?dt=(DataTable)ViewState["dt"];

dt.PrimaryKey=new DataColumn[]
{dt.Columns["CategoryID"]};
int key=(int)this.DataGrid1.DataKeys[(int)e.Item.ItemIndex];
Response.Write("Click "+key.ToString()+"?Column");
//
dr=dt.Rows.Find(key);
if(dr.Equals(""))
Response.Write("null");
else
Response.Write("no?null");
dt.Rows.Remove(dr);
dr.Delete();
dr.AcceptChanges();
DataGrid1.DataSource=dt.DefaultView;
DataGrid1.DataBind();
}

catch(System.NullReferenceException pp)
{Response.Write(pp.Message);}

catch(System.ArgumentException ae)
{Response.Write(ae.Message);}
}
}
}
――――――――――――――――――――――――――――――――――――――――――――
由于删除一行的时候没保存状态,所以当再删除一行或后退的时候,原来删除的那一行就又会出现,解决这种问题的方案就是在初始的时候把dataset中的datatable放到VIEWSTATE里,可以起到保存状态的作用,然后再在删除事件里把datatable从VIEWSTATE里取出来进来操作,再调用Remove()即可删除。






































































































































