我正在编写从Data Acess Layer获取数据并在GridView中显示它的项目。 问题是允许按列排序。当我点击columnt跟随头后发生以下错误:
异常详细信息:System.Web.HttpException:GridView'GridView1'触发事件排序,尚未处理。
这里是.cs代码:
public partial class Default: System.Web.UI.Page
{
EmployeesTableAdapter eta = new EmployeesTableAdapter();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = eta.GetData();
GridView1.DataBind();
}
}
}
这里是.aspx代码(仅限gridview):
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None"
AutoGenerateColumns="False">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
<asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/view.png"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="images/edit.png"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
someony知道如何允许按列排序吗?
答案 0 :(得分:9)
GridView不对自身进行排序。您需要为GridView排序事件添加一些代码并将其连接起来。
首先,您将OnSorting
事件的名称添加到GridView
页面上的.aspx
:
<asp:GridView ID="gridView" OnSorting="gridView_Sorting" runat="server" />
然后,在代码隐藏中添加该事件。 This example还处理更改排序方向 - 一旦用户排序,他们可能想要反转排序方向,你必须跟踪它。
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridView.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
gridView.DataSource = dataView;
gridView.DataBind();
}
}
答案 1 :(得分:8)
您需要定义一个排序方法并实现它:
<asp:GridView ID="GridView1" **OnSorting="gridViewSorting"** runat="server" />
protected void gridViewSorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridView.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = your sort expression
gridView.DataSource = dataView;
gridView.DataBind();
}
}