2014年7月13日 星期日

[RESOLVED] grid view row edit index changing on sorting?


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


沒有留言:

張貼留言