我绑定GridView就像 -
namespace grid_edit
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data source=HP_OWNER\\SQLEXPRESS;Database=demo;Integrated security=true";
con.Open();
SqlCommand cmd = new SqlCommand("select * from demo", con);
cmd.ExecuteNonQuery();
SqlDataAdapter mySqlAdapter = new SqlDataAdapter(cmd);
DataSet myDataSet = new DataSet();
mySqlAdapter.Fill(myDataSet);
DataTable myDataTable = myDataSet.Tables[0];
GridView1.DataSource = myDataTable;
GridView1.DataBind();
Session["mytable"] = myDataTable;
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
String updatedItem = e.NewValues[0].ToString();
String anotherUpdatedItem = e.NewValues[1].ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且标记如下 -
<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="True"
BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px"
CellPadding="4" CellSpacing="2" ForeColor="Black"
style="top: 63px; left: 309px; position: absolute; height: 183px; width: 312px; margin-top: 25px;"
OnRowEditing="GridView1_RowEditing"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowUpdating="GridView1_RowUpdating" >
<RowStyle BackColor="White" />
<FooterStyle BackColor="#CCCCCC" />
<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
现在我想从网格视图更新行,但在更新事件中GridViewUpdateEventArgs我将NewValues和OldValues清空.
如何获取要存储在数据库中的更新值?我在这里做错了吗?
尝试更改代码,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data source=(local);Database=northwind;Integrated security=true";
con.Open();
SqlCommand cmd = new SqlCommand("select * from Categories", con);
cmd.ExecuteNonQuery();
SqlDataAdapter mySqlAdapter = new SqlDataAdapter(cmd);
DataSet myDataSet = new DataSet();
mySqlAdapter.Fill(myDataSet);
DataTable myDataTable = myDataSet.Tables[0];
GridView1.DataSource = myDataTable;
if(!IsPostBack) /// <<<<<<<<<<<<<<<<<<<<<<
GridView1.DataBind();
Session["mytable"] = myDataTable;
}
Run Code Online (Sandbox Code Playgroud)
它适用于.NET Framework 4.
由于您使用的是.NET Framework 3.0,因此该代码不起作用.我查看了GridView的HandleUpdate方法,发现只有当Gridview通过DataSourceID属性绑定到DataSourceControl时才会填充这些集合(e.NewValues和e.OldValues)...可能的解决方案是使用ExtractValuesFromCell方法:
cell = GridView1.Rows[e.RowIndex].Cells[1] as DataControlFieldCell;
GridView1.Columns[1].ExtractValuesFromCell(
e.NewValues,
cell,
DataControlRowState.Edit,
true);
Run Code Online (Sandbox Code Playgroud)
注意:Page_Load方法应该具有我建议的代码,即DataBind应该只调用一次.
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |