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         }