得到更改后的值需要用到RowUpdating方法。
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//方法1
var row = GridView1.Rows[e.RowIndex];
for (int a = 0; a < row.Cells.Count - 2; a++)
{
GridView1.Columns[a].ExtractValuesFromCell(e.NewValues, row.Cells[a] as DataControlFieldCell, DataControlRowState.Edit, true);
Response.Write(e.NewValues[a]+“<br>”);//取得每列更改后的值
}
//这种方法无论是用的BoundField或者TemplateField都可以。
//方法2
for (int i = 0; i < row.Cells.Count - 2; i++)
{
TextBox txt = row.Cells[i].Controls[1] as TextBox;
Response.Write(txt.Text+“<br>”);//取得每列更改后的值
// string name = ((TextBox)row.Cells[i].FindControl("txtName")).Text; //也可以这样得到修改后的值
}
}
//我用的是 TemplateField绑定数据项,我用的TextBox在<EditItemTemplate>也可以用其它控件
//<Columns>
// <asp:TemplateField HeaderText=“ID">
// <ItemTemplate>
// <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID")%>'></asp:Label>
// </ItemTemplate>
// <EditItemTemplate>
// <asp:TextBox ID="txtID" runat="server" Text='<%# Bind("ID")%>'></asp:TextBox>
// </EditItemTemplate>
// <ControlStyle Width="50px" />
// <ItemStyle Width="50px" />
// </asp:TemplateField>
//</Columns>
--------------------------------------------------------结束分割线--------------------------------------------------------------------------------
我是在页面加载的时候 就显示GridView
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GridViewBind();
}
}
做的时候我忘了加if (!Page.IsPostBack),总是修改不了,e.NewValues[key]=e.OldValues[key],后来想想可能是点更新的时候会回传一次页面,就会用Page_Load的方法,写在这里算是给自己加深影响了。
随便放上RowEditing、RowCancelingEdit方法
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
GridViewBind(); // 数据绑定方法
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
GridViewBind();
}