4

Data Access Layer からデータを取得して GridView に表示するプロジェクトを書いています。問題は、列によるソートを許可することです。columnt の head をクリックすると、次のエラーが発生します。

例外の詳細: 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コード(グリッドビューのみ):

<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>

誰かが列による並べ替えを許可する方法を知っていますか?

4

2 に答える 2

10

GridView 自体は並べ替えられません。GridView の並べ替えイベント用のコードを追加し、それを接続する必要があります。

最初に、OnSortingイベントの名前をページに追加GridView.aspxます。

<asp:GridView ID="gridView" OnSorting="gridView_Sorting" runat="server" />

次に、そのイベントをコード ビハインドに追加します。この例では、並べ替えの方向の変更も処理します。ユーザーが並べ替えを行うと、並べ替えの方向を逆にしたい場合があり、それを追跡する必要があります。

   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();
   }
}
于 2012-05-27T18:58:48.523 に答える
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();
   }
}
于 2012-05-27T18:53:25.123 に答える