您的位置:首页 > 其它

GridView中按钮的编辑模式和更新数据

2012-03-30 23:24 686 查看
GridView控件取名gvUsers,绑定Users表中的查询所有用户,UserRolesId是Users表的一个外键,对应UserRoles状态表的Id

1、要想点击按钮能进入编辑状态、给按钮中的属性CommandName="edit"
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" Text="编辑" CommandName="edit" />
</ItemTemplate>

2、点击该按钮,该行变为编辑模式(id不能编辑可以改成readonly)

  protected void gvUsers_RowEditing(object sender, GridViewEditEventArgs e)
{
gvUsers.EditIndex = e.NewEditIndex; //点击哪个按钮,哪一行就进入编辑列
FillgvUsers(); //进入编辑模式也显示原始数据
}

3、编写TemplateField的编辑模板<EditItemTemplate>,进入编辑模式,该TemplateField变成该编辑项的控件

<asp:TemplateField HeaderText="状态">
<ItemTemplate>
<%#Eval("UserRoles.Name") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlUserRoles" runat="server">
</asp:DropDownList>
<asp:HiddenField ID="hfUserRoles" runat="server" Value='<%#Eval("UserRoles.Id") %>' />
</EditItemTemplate>
</asp:TemplateField>

//注意:进入编辑状态时,BoundField默认会变成文本框
//如果TemplateField显示值是枚举,则在下面加一个隐藏域,存入Id,到时绑下拉列表时可以根据该id找到对应的值

4、编辑模式TemplateField变成下拉列表,进行数据绑定

protected void gvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int state = (int)e.Row.RowState; //正常项进入行状态是0,交替项进入行状态是1
if (state==4||state==5) //正常项进入编辑项是4,交替项进入编辑项是5
{
DropDownList ddl = (DropDownList)(e.Row.FindControl("ddlUserRoles"));
ddl.DataSource = userRolesManager.GetAllUserRoles(); //绑定下拉列表数据源
ddl.DataTextField = "Name";
ddl.DataValueField = "Id";
ddl.DataBind();
HiddenField hf = (HiddenField)(e.Row.FindControl("hfUserRoles")); //根据隐藏域的Id查找Name
ddl.SelectedValue = hf.Value;
}
}
}

5、单击编辑按钮后是编辑按钮变成更新和取消两个按钮
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" Text="编辑" CommandName="edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="btnUpdate" runat="server" Text="更新" CommandName="update" />
<asp:Button ID="btnCancel" runat="server" Text="取消" CommandName="cancel" />
</EditItemTemplate>
</asp:TemplateField>

6、我们得GridView的属性DataKeyNames="Id" (用户Id),后面通过GridView.DataKeys[index].Value取到该Id

7、取消按钮事件

protected void gvUsers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvUsers.EditIndex = -1; //设置GridView的编辑索引为-1,则每行将取消编辑模式
FillUsers(); //重新绑定数据
}

8、更新按钮事件

protected void gvUsers_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
UserManager userManager =new UserManager();
int userId = (int)gvUsers.DataKeys[e.RowIndex].Value; //获取点击更新行的主键
BookShop.Models.User user = userManager.GetUserById(userId);
user.Name = ((TextBox)gvUsers.Rows[e.RowIndex].Cells[1].Controls[0]).Text; //如果是绑定字段(BoundField)

//设置新改的用户角色
DropDownList ddlUserRole = (DropDownList)gvUsers.Rows[e.RowIndex].FindControl("ddlUserRole"); //如果是模板字段(TempleteField)
int userRoleId = int.Parse(ddlUserRole.SelectedValue);//获取选中项的角色id
user.UserRole= new UserRoleManager().GetUserRoleById(userRoleId);

bool flag = userManager.ModifyUser(user);

if (flag)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"","alert('修改成功')",true);
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('修改失败')", true);
}
gvUsers.EditIndex = -1; //设置GridView的编辑索引为-1,则每行将取消编辑模式
FillUsers();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐