八、初学.NET—GridView 中实现每一行的编辑、删除和更新语句,并且编辑模式绑定下拉框或者单选框。
前端:
在设计视图中 添加新列,选择CommandField ,选择按钮类型和命令按钮。
<asp:CommandField HeaderText="编辑" ShowEditButton="True" ShowHeader="True" />
给每个模板列增加编辑模板
//普通文本编辑模板
<asp:TemplateField HeaderText="专业名称" SortExpression="MajorName">
<EditItemTemplate>
<asp:TextBox ID="tb_MajorName" runat="server" Text='<%# Bind("MajorName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("MajorName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
//单选框或者是下拉框绑定表或者其它数据源,可以使用DataSource指定数据源。
绑定到下拉框
前端:<asp:TemplateField HeaderText="所属系部名称" SortExpression="DepartmentName">
<ItemTemplate>
<asp:Label ID="lb_Department" runat="server" Text='<%# Bind("DepartmentName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddl_Department" runat="server" DataSource='<%#ddlDeparmentBind() %>' DataTextField="DepartmentName" DataValueField="DepartmentID" >
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
public DataSet ddlDeparmentBind()
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
{
using (SqlCommand cmd = new SqlCommand("select DepartmentName,DepartmentID from tbDepartment", conn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}
}
}
}
绑定到单选框
前台:
<asp:TemplateField HeaderText="评定等级">
<ItemTemplate>
<asp:RadioButtonList ID="rbl_Grade" runat="server" RepeatDirection="Horizontal" DataSource='<%#RblReviewOptionBind()%>' DataTextField="ReviewOptionName" DataValueField="ReviewOptionWeight" >
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
后台:
public DataSet RblReviewOptionBind()
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
{
using (SqlCommand cmd = new SqlCommand("select * from tbReviewOption order by ReviewOptionName", conn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}
}
}
}
//巧妙的绑定到下拉框,不一定是编辑模式才可用
前端:
<asp:TemplateField HeaderText="用户类型">
<ItemTemplate>
<%# FormatUserType(Eval("UserType").ToString()) %>
</ItemTemplate>
</asp:TemplateField>
后台:
protected string FormatUserType(string sUserType)
{
string[] arrs = new string[] {"管理员","教研室主任","评审人员" };
return arrs[Convert.ToInt16(sUserType)];
}
后台代码:实现进入编辑模式、退出编辑模式、更新和删除、选中操作,不要忘记绑定数据源。
protected void gv_ReviewOption_RowEditing(object sender, GridViewEditEventArgs e)
{
gv_ReviewOption.EditIndex = e.NewEditIndex;
SetBind(); //进入编辑模式后绑定数据源
}
protected void gv_ReviewOption_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv_ReviewOption.EditIndex = -1;//退出编辑模式要将 EdintIndex 设置为-1;
SetBind(); ////退出编辑模式后绑定数据源
}
//更新记录
protected void gv_ReviewOption_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int iIndex = Convert.ToInt16(e.RowIndex);
GridViewRow gvr = gv_ReviewOption.Rows[iIndex];
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
string sSql = "update tbReviewOption set ReviewOptionName ='" + ((gvr.Cells[2].FindControl("tb_ReviewOptionName")) as TextBox).Text.Trim() + "',ReviewOptionWeight='" + Convert.ToDouble(((gvr.Cells[3].FindControl("tb_ReviewOptionWeight")) as TextBox).Text.Trim()) + "' where ReviewOptionID='" + gv_ReviewOption.DataKeys[iIndex].Value + "'";
conn.Open();
using (SqlCommand cmd = new SqlCommand(sSql, conn))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "", string.Format("<script>alert('成功更新{0}条记录')</script>", cmd.ExecuteNonQuery()));
}
}
gv_ReviewOption.EditIndex = -1; //更新后要将 EdintIndex 设置为-1;
SetBind();///更新后绑定数据源
}