GridView数据显示控件的用法
1 在GridView获取单元格的值
①BoundField绑定的内容
gvUsers.Rows[1].Cells[2].Text(非编辑状态)
TextBox txtCount = (TextBox)gvUsers.Rows[e.RowIndex].Cells[2].Controls[0];(编辑状态)
然后通过txtCount.Text属性得到值
e.RowIndex是编辑行的索引
②模板列 绑定的内容(推荐使用label控件)
Convert.ToInt32(((Label)gvUsers.Rows[e.RowIndex].FindControl("lbId")).Text);
((Label)gvUsers.Rows[gvUsers.EditIndex].FindControl("lbPwd")).Text;(数据源控件的时候)
BoundField隐藏起来,不能获取值,那只能使用模板列
模板列里面可以放下拉列表等控件,实现外键的选择。
2 不使用数据源控件的GridView
①在Page_Load事件中 调用this.bind()方法(自己写的绑定数据方法)
if (!IsPostBack)
{
this.Bind();
}
protected void Bind()
{
gvUsers.DataSource = new UserManager().GetAllList();
gvUsers.DataBind();
}
数据源控件的自动生成列设置false,然后可以自己添加列。
②gvUsers_RowEditing事件中
gvUsers.EditIndex = e.NewEditIndex;//数据源控件的编辑行的索引为当前行
this.Bind();
③gvUsers_RowCancelingEdit事件中
gvUsers.EditIndex = -1;//数据源控件的编辑行等于-1,就是停止编辑
this.Bind();
④gvUsers_RowUpdating事件中
写更新的方法,可以找隐藏的单元格,上面的已经说了,注意更新数据的完整性
可以先获取这一行的数据,然后在修改每一个要修改的数据
gvUsers.EditIndex = -1;
this.Bind();
⑤gvUsers_Deleting事件中
⑥如果要分页的话,gvUsers_PageIndexChanging事件中
gvUsers.PageIndex = e.NewPageIndex;
this.Bind();
数据源控件属性允许分页
⑦编辑,删除,和添加的ButtonField都触发gvUsers_RowCommand事件
设置CommandName区分到底是点击了哪个按钮,e.CommandArgument得到索引。
CommandFiled和ButtonField是差不多的,通过设置CommandName,就一样了。
⑧gvUsers_DataBound事件是每行有编辑删除操作时触发的事件。
当在GridView控件更新时,四个事件触发的顺序:
1控件的RowUpdating
2数据源控件的Updating
(前两个事件,由于是在调用更新代码之前触发的,所以可以对用户更新的数据进行校验或修改)
3调用了业务逻辑层的方法(处理更新)
4数据源控件的Updated
5控件的RowUpdated事件
(可以通过判断e.Exception是否为控件,在程序中得到在第3步执行中有没有发生异常.)
3 使用数据源控件的GridView
①添加对象数据源,添加select,update,delete方法
注意delete方法的参数必须为实体类对象,并且设置,DateKeyNames
②修改obsUser_Updating事件
e.InputParameters[0]得到界面上的一列值
//通过e得到用户实体
User updagteUser = (User)e.InputParameters[0];
//找到隐藏的模板里面的密码
updagteUser.LoginPwd = ((Label)gvUsers.Rows[gvUsers.EditIndex].FindControl("lbPwd")).Text;
4 代码
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!IsPostBack) 4 { 5 this.Bind(); 6 } 7 } 8 9 protected void Bind() 10 { 11 gvUsers.DataSource = new UserManager().GetAllList(); 12 gvUsers.DataBind(); 13 } 14 15 protected void gvUsers_RowEditing(object sender, GridViewEditEventArgs e) 16 { 17 gvUsers.EditIndex = e.NewEditIndex;//数据源控件的编辑行的索引为当前行 18 this.Bind(); 19 } 20 21 protected void gvUsers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 22 { 23 gvUsers.EditIndex = -1;//数据源控件的编辑行等于-1,就是停止编辑 24 this.Bind(); 25 } 26 27 protected void gvUsers_RowUpdating(object sender, GridViewUpdateEventArgs e) 28 { 29 try 30 { 31 //TextBox txtCount = (TextBox)gvUsers.Rows[gvUsers.EditIndex].Cells[0].Controls[0]; 32 //int id = Convert.ToInt32(txtCount.Text); 33 int id = Convert.ToInt32(gvUsers.Rows[e.RowIndex].Cells[0].Text); 34 User updagteUser = new UserManager().GetModel(id); 35 updagteUser.UserRole.Id = Convert.ToInt32(((DropDownList)gvUsers.Rows[gvUsers.EditIndex].Cells[6].FindControl("DropDownList1")).SelectedValue); 36 updagteUser.UserState.Id = Convert.ToInt32(((DropDownList)gvUsers.Rows[gvUsers.EditIndex].Cells[7].FindControl("DropDownList2")).SelectedValue); 37 new UserManager().Update(updagteUser); 38 gvUsers.EditIndex = -1; 39 this.Bind(); 40 } 41 catch (Exception ex) 42 { 43 Common.ShowMessage(Page, ex.Message); 44 } 45 46 } 47 48 protected void gvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e) 49 { 50 int id = Convert.ToInt32(gvUsers.Rows[e.RowIndex].Cells[0].Text); 51 new UserManager().Delete(id); 52 this.Bind(); 53 } 54 55 protected void gvUsers_RowCommand(object sender, GridViewCommandEventArgs e) 56 { 57 if (e.CommandName == "PasswordReset") 58 { 59 //得到是第几行 60 int index = Convert.ToInt32(e.CommandArgument); 61 //得到Id这一列 62 int id = Convert.ToInt32(gvUsers.Rows[index].Cells[0].Text); 63 User resetUser = new UserManager().GetModel(id); 64 if (resetUser != null) 65 { 66 resetUser.LoginPwd = Common.GetMD5("123456"); 67 new UserManager().Update(resetUser); 68 Common.ShowMessage(Page, "密码已经重置成123456"); 69 } 70 else 71 { 72 Common.ShowMessage(Page, "用户未找到!"); 73 } 74 } 75 } 76 77 protected void gvUsers_PageIndexChanging(object sender, GridViewPageEventArgs e) 78 { 79 gvUsers.PageIndex = e.NewPageIndex; 80 this.Bind(); 81 }