日期:2014-05-19  浏览次数:20486 次

有关DataView在DataGrid的行编辑问题,奇怪为什么能够执行却没有错误!
private   void   Page_Load(object   sender,   System.EventArgs   e)
{
//   在此处放置用户代码以初始化页面
if(Session[ "shopcart "]==null)
{
//数据库连接;
string   s= "select   ID,ClassName,ClassTypeID   from   ClassTB   order   by   ID ";
cart=Conn.LoadTable(s);//返回查询结果表

Session[ "shopcart "]=cart;
}
else
{
cart=(DataTable)Session[ "shopcart "];
}

dv=new   DataView(cart);
//////////////////////////////////////////这里输出的行树,在行编辑之后,cart.Rows.Count每次累加,而dv.Count每次却不变?为什么呢?
Response.Write( "Page   Load...cart   count   is   "+cart.Rows.Count+ " <br> ");
Response.Write( "Page   Load...the   dataview   count   is   "+dv.Count+ " <br> ");

if(!IsPostBack)
{
this.BindData();
}
}
       
public   void   DataGrid1_UpdateCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)
{
                  int   ID=Convert.ToInt32(e.Item.Cells[0].Text);
string   ClassName=((System.Web.UI.WebControls.TextBox)e.Item.Cells[1].Controls[0]).Text;
decimal   TypeID=Convert.ToDecimal(e.Item.Cells[2].Text);

dv=new   DataView(cart);
dv.RowFilter= "ID= ' "+ID+ " ' ";
if(dv.Count> 0)
{
dv.Delete(0);
}

dv.RowFilter= " ";

/////////////////////////这里应该是每次update都在cart中加一行数据的
DataRow   dr=cart.NewRow();
dr[0]=ID;
dr[1]=ClassName;
dr[2]=TypeID;
cart.Rows.Add(dr);
//////////////////////////////////////////////////////////////////

this.DataGrid1.EditItemIndex=-1;
this.BindData();
}

public   void   DataGrid1_EditCommand(object   source,System.Web.UI.WebControls.DataGridCommandEventArgs   e)
{
this.DataGrid1.EditItemIndex=(int)e.Item.ItemIndex;
this.BindData();
}

public   void   DataGrid1_CancelCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)
{
this.DataGrid1.EditItemIndex=-1;
this.BindData();
}

public   void   BindData()
{
///////////////////////////////这里输出的dv.Count在每次Update后,始终不变??
this.DataGrid1.DataSource=dv;
this.DataGrid1.DataBind();
}

------解决方案--------------------
程序没有错误,只是你都更新到数据集了,却没有写入数据库。
cart.Rows.Add(dr);之类的都是更新内存中的数据集,不会自动写入数据库,需要自己写,有以下方法:
(1)创建SqlDataAdapter,设好SQL语句,调用它的Update(DataTable)函数。
(2)用Insert语句直接插入。