当在GridView控件更新时,四个事件触发的顺序:
1控件的RowUpdating
2数据源控件的Updating
(前两个事件,由于是在调用更新代码之前触发的,所以可以对用户更新的数据进行校验或修改)
3调用了业务逻辑层的方法(处理更新)
4数据源控件的Updated
5控件的Updated事件
(可以通过判断e.Exception是否为控,来在程序中得到在第3步执行中有没有发生异常.)
更新效果
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
if (GridView1.EditIndex != -1)
{
int editRowIndex = GridView1.EditIndex;//获得GridView的当前编辑列
string typeNameNew = ((TextBox)GridView1.Rows[editRowIndex].Cells[0].Controls[0]).Text;//因为从前台知道当前单元格是textBox所以取当前列控件强转textBox在去取值
int id=Convert.ToInt32(((Label)GridView1.Rows[editRowIndex].Cells[8].FindControl("Label3")).Text);//这里是在模版列中通过FindControl去取值
RoomType updateRoomType = roomTypeManager.GetModel(id);//更新前把原值取出,避免数据丢失,下面在覆盖掉变动的值
updateRoomType.TypeName = typeNameNew;
updateRoomType.AddBed = ((CheckBox)GridView1.Rows[editRowIndex].Cells[1].Controls[0]).Checked;//复选框的操作
roomTypeManager.Update(updateRoomType);
//这两步是为了更好的用户体验
GridView1.EditIndex = -1;//把编辑列去掉
this.Bind();//从新绑定
}
}
在GridView中用BouldField绑定的内容时,通过下面得数据
GridView1.Rows[2].Cells[0].Text
在GridView中用BouldField绑定的内容时,当GridView处于编辑状态时,如何获得TextBox中用户输入的内容:
((TextBox)GridView1.Rows[2].Cells[0].Controls[0]).Text;
// Label2.Text = GridView1.Rows[2].Cells[0].Text; //获得BouldField绑定的数据 GridView处于非编辑状态
//Label2.Text = ((TextBox)GridView1.Rows[2].Cells[0].Controls[0]).Text;//在GridView中用BouldField绑定的内容时,当GridView处于编辑状态时,如何获得TextBox中用户输入的内容:
当使用BouldField绑定数据,这一列如果被隐藏的话,那么隐藏的值无法获得到.所以只能通过模版来实现
在GridView中,获得模板列中某个控件的值时,使用FindControl("")来得到这个控件
删除功能的写法
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//还可以不精确找他的单元格Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].FindControl("Label1")).Text);
int id = Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].Cells[8].FindControl("Label1")).Text);
roomTypeManager.Delete(id);
this.Bind();
}
如果在GridView控件中,一个按钮的CommandName为
edit时,则会自动触发GridView编辑功能
cancel时,则会自动触发GridView取消编辑功能
delete时,则会自动触发GridView删除功能
update时,则会自动触发GridView更新功能
数据绑定:
第一种:手写代码绑定
1)获得数据一般要是一个集合
2)把这个集合赋给控件的DataSource属性
3)执行这个控件的DataBind()方法
因为多次调用所以封装成一个方法
protected void Bind()
{
List<RoomType> allRoomTypes = roomTypeManager.GetModelList("");
GridView1.DataSource = allRoomTypes;
GridView1.DataBind();
}
数据源控件 objectDataSource
数据绑定控件 (显示数据的控件)ListView GridView