在GridView中经常要用到比如删除,选择,编辑等命令,下面我就来详细说明各个功能的实现:
首先加入一个GridView控件,设置其属性:
1.在Columns中添加CommandField列如:Delete;Select;Edit,Update,Cancel三列.
2.DataKeyNames添加需要绑定表的主键(最好选择它),以便在后面的程序中使用该值.
其它的属性就先不设置了,因为已经够用了.哈哈...
现在就来具体实现吧.
首先,我使用SQL Server2000中的NorthWind数据库.先写一个绑定数据的函数
public void BindData() //用来绑定数据到GridView
{
SqlConnection con = DB.createConnection();
con.Open();
SqlDataAdapter ada = new SqlDataAdapter("select employeeID,LastName,FirstName from Employees", con);
DataSet ds = new DataSet();
ada.Fill(ds);
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}
现在写编辑按钮的事件,当然要先在GridView中添加RowEditing事件:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
BindData();
}
页面现在可以编辑了,编辑之后保存到数据库里面,这一段比较关键主要是要获取被编辑行的主键值,以及要获得更新的值.添加RowUpdating事件:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int i = this.GridView1.EditIndex; //e.RowIndex是当前被选中的行号.
string firstName = ((TextBox)(GridView1.Rows[i].Cells[5].Controls[0])).Text.ToString();
DataKey key = this.GridView1.DataKeys[e.RowIndex]; //key是个数组,前提是要在属性DataKeyNames中设置数据库字段,通常是选主键.
int id = int.Parse(key[0].ToString());//key[]就可以取得字段对应的值
/*
* 连接数据库,提交更新的资料
*/
SqlConnection uptCon = DB.createConnection();
uptCon.Open();
SqlCommand cmd = new SqlCommand("update employees set FirstName='" + firstName + "' where employeeID=" + id,uptCon);
cmd.ExecuteNonQuery();
Response.Write("<script>alert('更新成功!')</script>");
//回到编辑页面,准备下一次的修改
this.GridView1.EditIndex = -1;
BindData();
}
随便选择一行进行编辑,然后点击更新,现在数据就可以更新了哦,哈哈...成功了!
最后,如果我们不想更新了呢?此时就要Cancel了,同样添加RowCancelingEdit事件
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
BindData();
}
到此,关于Edit,Update,Cancel事件已经全部实现了,如果要实现Delete就添加RowDeleting事件,代码与Update事件类似,主要的是获得选定行的主键,因为有了主键才方便操作数据库.
我有一点不明白的是RowUpdated事件是什么时候触发的?与RowUpdating有什么关联吗?上面的例子没有用它也实现了功能(井底之见),我学到了再写它的作用.