<
asp
:
GridView
ID
="gridView"
AllowPaging
="true"
AllowSorting
="true
"
OnPageIndexChanging
="gridView_PageIndexChanging"
OnSorting
="gridView_Sorting"
runat
="server" />
private
string
GridViewSortDirection
{
get
{
return
ViewState[
"SortDirection"
]
as
string
??
"ASC"
; }
set
{ ViewState[
"SortDirection"
] =
value
; }
}
private
string
GridViewSortExpression
{
get
{
return
ViewState[
"SortExpression"
]
as
string
??
string
.Empty; }
set
{ ViewState[
"SortExpression"
] =
value
; }
}
private
string
GetSortDirection()
{
switch
(GridViewSortDirection)
{
case
"ASC"
:
GridViewSortDirection =
"DESC"
;
break
;
case
"DESC"
:
GridViewSortDirection =
"ASC"
;
break
;
}
return
GridViewSortDirection;
}
protected
void
gridView_PageIndexChanging(
object
sender,
GridViewPageEventArgs
e)
{
gridView.DataSource = SortDataTable(gridView.DataSource
as
DataTable
,
true
);
gridView.PageIndex = e.NewPageIndex;
gridView.DataBind();
}
protected
DataView
SortDataTable(
DataTable
dataTable,
bool
isPageIndexChanging)
{
if
(dataTable !=
null
)
{
DataView
dataView =
new
DataView
(dataTable);
if
(GridViewSortExpression !=
string
.Empty)
{
if
(isPageIndexChanging)
{
dataView.Sort =
string
.Format(
"{0} {1}"
, GridViewSortExpression, GridViewSortDirection);
}
else
{
dataView.Sort =
string
.Format(
"{0} {1}"
, GridViewSortExpression, GetSortDirection());
}
}
return
dataView;
}
else
{
return
new
DataView
();
}
}
protected
void
gridView_Sorting(
object
sender,
GridViewSortEventArgs
e)
{
GridViewSortExpression = e.SortExpression;
int
pageIndex = gridView.PageIndex;
gridView.DataSource = SortDataTable(gridView.DataSource
as
DataTable
,
false
);
gridView.DataBind();
gridView.PageIndex = pageIndex;
}