有关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语句直接插入。