C# .net GridView编辑行数据
比较原始的编辑功能,只能在数据量小的时候用,数据一多体验就很不好,但还是记录一下吧。
原理就是用label和textbox两个控件绑定同一列数据,点编辑就显示textbox,平时显示label
前端
<asp:GridView ID="grid_01" runat="server" DataKeyNames="col3" OnRowDataBound="grid_01_RowDataBound" AutoGenerateColumns="False" OnRowEditing="grid_01_RowEditing" OnRowCancelingEdit="grid_01_RowCancelingEdit"
onrowupdating="grid_01_RowUpdate" AutoGenerateEditButton="true" ShowHeader="true" >
<Columns>
<asp:TemplateField ShowHeader="true" HeaderText="PHASE" >
<ItemTemplate>
<asp:Label ID="lable_col1" runat="server" Text='<%# Bind("col1") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="text_col1" runat="server" Text='<%# Bind("col1") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col2" >
<ItemTemplate>
<asp:Label ID="lable_col2" runat="server" Text='<%# Bind("col2") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="text_col2" runat="server" Text='<%# Bind("col2") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col3">
<ItemTemplate>
<asp:Label ID="lable_col3" runat="server" Text='<%# Bind("col3") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="text_col3" runat="server" Text='<%# Bind("col3") %>' />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后端
//全局变量,数据库连接
SqlConnection DB = new SqlConnection(WebConfigurationManager.AppSettings["key1"].ToString());
protected void grid_01_RowEditing(object sender, GridViewEditEventArgs e)
{
EditStatus = 1; //用来判断是否处在编辑状态,在改变单元格颜色时用到,可以不用
grid_01.EditIndex = e.NewEditIndex;
BindData(4); //没有绑定数据则需要点击两次,调用你自己的gridview绑定方法,这点略坑……
}
protected void grid_01_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
EditStatus = 0;
grid_01.EditIndex = -1;
BindData(4);
}
protected void grid_01_RowUpdate(object sender, GridViewUpdateEventArgs e)
{
//获取编辑框值
string Newcol1 = ((TextBox)grid_01.Rows[e.RowIndex].Cells[0].FindControl("text_col1")).Text.Trim();
string Newcol2 = ((TextBox)grid_01.Rows[e.RowIndex].Cells[1].FindControl("text_col2")).Text.Trim();
string Newcol3 = ((TextBox)grid_01.Rows[e.RowIndex].Cells[2].FindControl("text_col3")).Text.Trim();
//中间可以放判断编辑的字符是否符合规则,我就省了
try
{
DB.Open();
string SqlUpdate = @"update table1 set col1='" + Newcol1 + "',col2='" + Newcol2 + "' where col3='" + col3+ "'";
//根据col3来更新数据库
SqlCommand cmdUpdate = new SqlCommand(SqlUpdate, DB);
cmdUpdate.ExecuteNonQuery();
DB.Close();
Response.Write("<script>alert('更新成功!')</script>");
}
catch {
EditStatus = 0;
Response.Write("<script>alert('更新失败!')</script>");
}
EditStatus = 0;
grid_01.EditIndex = -1;
BindData(4);
}