GridView.Sorting Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит при щелчке по гиперссылке для сортировки столбца, но до обработки операции сортировки элементом управления GridView.
public:
event System::Web::UI::WebControls::GridViewSortEventHandler ^ Sorting;
public event System.Web.UI.WebControls.GridViewSortEventHandler Sorting;
member this.Sorting : System.Web.UI.WebControls.GridViewSortEventHandler
Public Custom Event Sorting As GridViewSortEventHandler
Тип события
Примеры
В следующем примере показано, как использовать Sorting событие для выполнения функции сортировки, когда GridView элемент управления привязан к объекту DataTable путем установки DataSource свойства программным способом.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = Session["TaskTable"] as DataTable;
if (dt != null)
{
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
TaskGridView.DataSource = Session["TaskTable"];
TaskGridView.DataBind();
}
}
private string GetSortDirection(string column)
{
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Create a new table.
DataTable taskTable = new DataTable("TaskList");
// Create the columns.
taskTable.Columns.Add("Id", typeof(int));
taskTable.Columns.Add("Description", typeof(string));
//Add data to the new table.
for (int i = 0; i < 10; i++)
{
DataRow tableRow = taskTable.NewRow();
tableRow["Id"] = i;
tableRow["Description"] = "Task " + (10 - i).ToString();
taskTable.Rows.Add(tableRow);
}
//Persist the table in the Session object.
Session["TaskTable"] = taskTable;
//Bind the GridView control to the data source.
TaskGridView.DataSource = Session["TaskTable"];
TaskGridView.DataBind();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sorting example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="TaskGridView" runat="server"
AllowSorting="true"
OnSorting="TaskGridView_Sorting" >
</asp:GridView>
</div>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub TaskGridView_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
'Retrieve the table from the session object.
Dim dt = TryCast(Session("TaskTable"), DataTable)
If dt IsNot Nothing Then
'Sort the data.
dt.DefaultView.Sort = e.SortExpression & " " & GetSortDirection(e.SortExpression)
TaskGridView.DataSource = Session("TaskTable")
TaskGridView.DataBind()
End If
End Sub
Private Function GetSortDirection(ByVal column As String) As String
' By default, set the sort direction to ascending.
Dim sortDirection = "ASC"
' Retrieve the last column that was sorted.
Dim sortExpression = TryCast(ViewState("SortExpression"), String)
If sortExpression IsNot Nothing Then
' Check if the same column is being sorted.
' Otherwise, the default value can be returned.
If sortExpression = column Then
Dim lastDirection = TryCast(ViewState("SortDirection"), String)
If lastDirection IsNot Nothing _
AndAlso lastDirection = "ASC" Then
sortDirection = "DESC"
End If
End If
End If
' Save new values in ViewState.
ViewState("SortDirection") = sortDirection
ViewState("SortExpression") = column
Return sortDirection
End Function
Protected Sub Page_Load()
If Not Page.IsPostBack Then
' Create a new table.
Dim taskTable As New DataTable("TaskList")
' Create the columns.
taskTable.Columns.Add("Id", GetType(Integer))
taskTable.Columns.Add("Description", GetType(String))
'Add data to the new table.
For i = 0 To 9
Dim tableRow As DataRow = taskTable.NewRow()
tableRow("Id") = i
tableRow("Description") = "Task " & (10 - i)
taskTable.Rows.Add(tableRow)
Next i
'Persist the table in the Session object.
Session("TaskTable") = taskTable
'Bind the GridView control to the data source.
TaskGridView.DataSource = Session("TaskTable")
TaskGridView.DataBind()
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sorting example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="TaskGridView" runat="server"
AllowSorting="true"
OnSorting="TaskGridView_Sorting" >
</asp:GridView>
</div>
</form>
</body>
</html>
В следующем примере показано, как использовать Sorting событие для отмены операции сортировки.
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void CustomersGridView_Sorting(Object sender, GridViewSortEventArgs e)
{
// Cancel the sorting operation if the user attempts
// to sort by address.
if (e.SortExpression == "Address")
{
e.Cancel = true;
Message.Text = "You cannot sort by address.";
SortInformationLabel.Text = "";
}
else
{
Message.Text = "";
}
}
void CustomersGridView_Sorted(Object sender, EventArgs e)
{
// Display the sort expression and sort direction.
SortInformationLabel.Text = "Sorting by " +
CustomersGridView.SortExpression.ToString() +
" in " + CustomersGridView.SortDirection.ToString() +
" order.";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView Sorting Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView Sorting Example</h3>
<asp:label id="Message"
forecolor="Red"
runat="server"/>
<br/>
<asp:label id="SortInformationLabel"
forecolor="Navy"
runat="server"/>
<br/>
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSource"
autogeneratecolumns="true"
allowpaging="true"
emptydatatext="No data available."
allowsorting="true"
onsorting="CustomersGridView_Sorting"
onsorted="CustomersGridView_Sorted"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Sub CustomersGridView_Sorting(sender As Object, e As GridViewSortEventArgs)
' Cancel the sorting operation if the user attempts
' to sort by address.
If e.SortExpression = "Address" Then
e.Cancel = True
Message.Text = "You cannot sort by address."
SortInformationLabel.Text = ""
Else
Message.Text = ""
End If
End Sub
Sub CustomersGridView_Sorted(ByVal sender As Object, ByVal e As EventArgs)
' Display the sort expression and sort direction.
SortInformationLabel.Text = "Sorting by " & _
CustomersGridView.SortExpression.ToString() & _
" in " & CustomersGridView.SortDirection.ToString() & _
" order."
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView Sorted and Sorting Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView Sorted and Sorting Example</h3>
<asp:label id="Message"
forecolor="Red"
runat="server"/>
<br/>
<asp:label id="SortInformationLabel"
forecolor="Navy"
runat="server"/>
<br/>
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSource"
autogeneratecolumns="true"
allowpaging="true"
emptydatatext="No data available."
allowsorting="true"
onsorting="CustomersGridView_Sorting"
onsorted="CustomersGridView_Sorted"
runat="server">
</asp:gridview>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
Комментарии
Событие Sorting возникает при щелчке гиперссылки для сортировки столбца, но до того, как GridView элемент управления обработает операцию сортировки. Это позволяет предоставить метод обработки событий, который выполняет пользовательскую подпрограмму, например отмену операции сортировки, при каждом возникновении этого события.
Объект GridViewSortEventArgs передается методу обработки событий, который позволяет определить выражение сортировки для столбца и указать, что операция выбора должна быть отменена. Чтобы отменить операцию выбора, присвойте свойству CancelGridViewSortEventArgs объекта значение true
.
Сведения о программном запуске операции сортировки см. в Sort разделе Метод .
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.