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 }