GridView控件只让某列可以编辑,并在后台获取值的方法
需求是这样的:
使用GridView绑定数据源显示数据,然后其中的价格和报价总数要窗体一加载就是编辑模式,并且修改里面的值点击保存更改可以成功修改数据库中对应的字段。
一开始我想的是使用GridView自带的RowEditing:开始编辑事件,后台代码是这样的:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex; // 设置开启编辑
bind(); // 重新绑定 GridView
}
e.NewEditIndex是将列索引传递到后台(从0开始),这样就能实现编辑效果,但是需求是窗体一加载就要实现编辑状态,而且是所有行的某两列都要实现编辑状态,使用GridView1.EditIndex只能实现一行的编辑状态,可以控制那两列,只需要将不用编辑状态的列隐藏:控件名.Rows[e.NewEditIndex].Cells[列].Enabled = false;
显然在这里不能用控件自带的编辑方法去实现效果,那么这个时候就轮到模板列出场了,话不多说,直接看代码:
前台代码:
<asp:Button ID="btnSave" runat="server" Text="保存更改" OnClick="btnSave_Click" />
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:BoundField DataField="SaleOrderDetailID" HeaderText="明细编号" ReadOnly="true" SortExpression="SaleOrderDetailID" />
<asp:BoundField DataField="ProductName" HeaderText="产品名称" ReadOnly="true" SortExpression="ProductCode" />
<asp:BoundField DataField="ProductUnit" HeaderText="单位" ReadOnly="true" SortExpression="ProductUnit" />
<asp: