을 가지고 있지 않습니다ASP.Net의 GridView RowUpdate은 발사하지와의 RowUpdating 내가의 GridView 다음 한 NewValues
<asp:GridView ID="gridCar" runat="server" RowStyle-ForeColor="Black" AllowSorting="true" OnSorting="gridCar_Sorting" AutoGenerateEditButton="true" OnRowEditing="gridCar_RowEditing" OnRowCancelingEdit="gridCar_RowCancelingEdit" OnRowUpdating="gridCar_RowUpdating" OnRowUpdated="gridCar_RowUpdated"></asp:GridView>
내가 편집 버튼으로 선택한 행을 업데이트 할. 문제는, 내가 gridCar_RowUpdating
에서하려고하면 e.NewValues
에는 편집 된 값이 아니라 이전 값이 포함되어 있다는 것입니다.
내가 검색 한 결과 onRowUpdated
이벤트를 사용해야한다는 것을 알았지 만 또 다른 문제가 있습니다. 이 사건은 전혀 해고되지 않습니다. e.Cancel = false
을 gridCar_RowUpdating
에 설정하려고했으나 문제가 해결되지 않습니다.
GridView는 DataTable에 바인딩됩니다.
편집 : 당신은 당신이 포스트 백에 GridView
을 데이터 바인딩하지 않도록
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class _Default : Page
{
DataTable carsTable = new DataTable("cars");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
carsTable.Columns.Add("CarID");
carsTable.Columns.Add("CarRegNum");
carsTable.Columns.Add("CarModel");
carsTable.Columns.Add("CarType");
carsTable.Columns.Add("CarOwner");
carsTable.Rows.Add(1, "AAA-111", "Toyota", "Hatchback", "Matti");
carsTable.Rows.Add(2, "BBB-222", "Mercedes-Benz", "Van", "Keijo");
carsTable.Rows.Add(3, "CCC-333", "Renault", "Regular", "Matilda");
carsTable.AcceptChanges();
gridCar.DataSource = carsTable;
gridCar.DataBind();
}
}
protected string dataViewSortDirection(SortDirection direction)
{
switch (direction)
{
case SortDirection.Ascending:
return "ASC";
case SortDirection.Descending:
return "DESC";
default:
throw new ArgumentOutOfRangeException();
}
}
protected void gridCar_Sorting(object sender, GridViewSortEventArgs e)
{
gridCar.Sort(e.SortExpression, e.SortDirection);
// update GridView
gridCar.DataBind();
}
protected void gridCar_RowEditing(object sender, GridViewEditEventArgs e)
{
gridCar.EditIndex = e.NewEditIndex;
gridCar.DataBind();
}
protected void gridCar_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gridCar.EditIndex = -1;
gridCar.DataBind();
}
protected void gridCar_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
labelDebug.Text += "b";
//gridCar.EditIndex = -1;
//gridCar.DataBind();
}
protected void gridCar_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
labelDebug.Text += "a";
gridCar.EditIndex = -1;
gridCar.DataBind();
}
}
ViewState에 데이터 테이블을 저장하는 것은 페이지 크기를 늘리고 성능을 떨어 뜨리거나, 클라이언트 측에서 ViewState를 해독하여 DataTable이 안전하지 못하기 때문에 바람직하지 않습니다. –
@TimSchmelter 내 경우에는 내가 무엇을 제안하겠습니까? – Kyto
내 대답에 댓글을 달았으므로 데이터가 GridView의 ViewState에 저장되므로 데이터 소스를 유지할 필요가 없습니다. 그러므로'e.OldValues'와'e.NewValues'는 서버에서 클라이언트로 그리고 다시 서버로 DataTable을 전송하지 않아도 설정됩니다. 하지만 첫 번째로드 ('! IsPostBack')에서만 데이터 바인딩이 이루어 지도록해야합니다. –