Hi
I have a grid view with sorting fields. and edit row fuctionality
i bind it with data. when i click any sorting field it sorts.
now when i click edit it always bring the first row the way data comes from sql server. it doesn't edit the row that should be there after applying sorting.
----------- Code
protected
voidLoad_Users_GridView_On_View_Click()
{
try
{
ViewState[
"gvUsersDataTable"]
= null;
DataTable
gridViewTable = (DMAdminPageDAL.Load_Users_GridView_On_View_Click()).Tables[0];
ViewState[
"gvUsersDataTable"]
= gridViewTable;
if
(gridViewTable.Rows.Count > 0)
{
gvUsers.DataSource = gridViewTable;
gvUsers.DataBind();
}
else
{
OperationSuccessful(
"No Records");
}
}
catch
(Exception ex)
{
OperationFailure(ex.Message);
}
}
protected
void gvUsers_Sorting_Test(object
sender, GridViewSortEventArgse)
{
string
sortExpression = e.SortExpression;
string
Direction = string.Empty;
if
(SortDirection == SortDirection.Ascending)
{
SortDirection =
SortDirection.Descending;
Direction =
" Desc";
}
else
{
SortDirection =
SortDirection.Ascending;
Direction =
" ASC";
}
try
{
DataTable
table = (DMAdminPageDAL.Load_Users_GridView_On_View_Click()).Tables[0];
table.DefaultView.Sort = sortExpression + Direction;
gvUsers.DataSource = table;
gvUsers.DataBind();
}
catch
(Exception ex)
{
OperationFailure(ex.Message);
}
}
protected
void gvUsers_RowEditing_Test(object
sender, GridViewEditEventArgs e)
{
gvUsers.EditIndex = e.NewEditIndex;
try
{
//ViewState["dt"] = ((DataView)gvUsers.DataSource).ToTable();
Load_Users_GridView_On_View_Click();
((
TextBox)gvUsers.Rows[e.NewEditIndex].Cells[4].Controls[0]).Style.Add("width",
"300px");
if
(this.gvUsers.EditIndex >= 0)
{
this.gvUsers.Rows[this.gvUsers.EditIndex].Focus();
}
}
catch
(Exception ex)
{
OperationFailure(ex.Message); ;
}
}
trying to solve it through view state not working eather
code---------------
protected
void gvUsers_Sorting(object
sender, GridViewSortEventArgse)
{
string
Direction = string.Empty;
string
sortExpression = e.SortExpression;
DataTable
dataTable = ViewState["gvUsersDataTable"]
as
DataTable;
try
{
if
(dataTable != null)
{
dataTable.DefaultView.Sort = sortExpression +
" "
+ GetSortDirection(e.SortExpression);
ViewState[
"gvUsersDataTable"]
= dataTable;
gvUsers.DataSource = dataTable;
gvUsers.DataBind();
}
}
catch
(Exception ex)
{
OperationFailure(ex.Message);
}
}
protected
void gvUsers_RowEditing(object
sender, GridViewEditEventArgs e)
{
gvUsers.EditIndex = e.NewEditIndex;
try
{
//ViewState["dt"] = ((DataView)gvUsers.DataSource).ToTable();
DataTable
dataTable = ViewState["gvUsersDataTable"]
as
DataTable;
gvUsers.DataSource = dataTable;
gvUsers.DataBind();
((
TextBox)gvUsers.Rows[e.NewEditIndex].Cells[4].Controls[0]).Style.Add("width",
"300px");
if
(this.gvUsers.EditIndex >= 0)
{
this.gvUsers.Rows[this.gvUsers.EditIndex].Focus();
}
}
catch
(Exception ex)
{
OperationFailure(ex.Message); ;
}
}
I think we can set up ViewState["gvUsersDataTable"] value After sorting data, Please try to refer to the following code:
void gvUsers_Sorting(object sender, GridViewSortEventArgse)
{
string Direction = string.Empty;
string sortExpression = e.SortExpression;
DataTable dataTable = ViewState["gvUsersDataTable"] as DataTable;
try
{
if (dataTable != null)
{
dataTable.DefaultView.Sort = sortExpression +
" " + GetSortDirection(e.SortExpression);
gvUsers.DataSource = dataTable;
gvUsers.DataBind();
ViewState[
"gvUsersDataTable"] = ((DataView) gvUsers.DataSource).ToTable();;
}
}
catch (Exception ex)
{
OperationFailure(ex.Message);
}
}
Best Regards,
Terry Guo
沒有留言:
張貼留言