web-dev-qa-db-ja.com

asp.netのgridview列を並べ替える

データベースからデータをロードするグリッドビューがあります。データは、日時でソートされて初めてグリッドビューに表示されます。そのグリッドビューの1つの列で、たとえばmain_post列で並べ替えを許可したいと思います。これを試しましたが、列のヘッダーをクリックしてもグリッドビューが並べ替えられませんでした。

これは、gridviewのフロントエンドコードです。

<asp:DataGrid ID="Datagrid1" runat="server" 
    AllowPaging="True" 
    AllowSorting="True" 
    OnSorting="ComponentGridView_Sorting">
    <Columns>
        <asp:BoundColumn DataField="main_post" HeaderText="Header Post ID" 
            SortExpression="ComponentGridView_Sorting" />
    </Columns>
</asp:DataGrid>

私のバックエンドコード:

protected void loadData()
{
    DataTable dtTemp;
    dtTemp = objDBInterface.getResults(strSQL);
    Datagrid1.DataSource = dtTemp;
    Datagrid1.DataBind();
    ViewState["dtbl"] = dtTemp;
}

protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = ViewState["dtbl"] as DataTable;
        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection);
            Datagrid1.DataSource = dataView;
            Datagrid1.DataBind();
        }
    }
    private string ConvertSortDirection(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;
            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }

        return newSortDirection;
    }

エラーはなく、間違いがどこにあるのかわかりません。誰かがこの問題を解決するのを手伝ってくれませんか?

前もって感謝します。

3
Ifwat Ibrahim

私は解決策を得ました。これがこの同様の問題に直面している他の人々に役立つことを願っています。 .aspxページで変更する必要があります:

OnSorting="ComponentGridView_Sorting"から

to onsortcommand="ComponentGridView_Sorting"

次に、このコードをaspx.cs(バックエンドコード)に配置します。

protected void Datagrid1_SortCommand(object source, DataGridSortCommandEventArgs e)
    {
        string strSQL;
        DataTable dt;
        strSQL = "YOUR SELECT STATEMENT (SQL)";
        dt = strSQL;
            {
                string SortDir = string.Empty;
                if (dir == SortDirection.Ascending)
                {
                    dir = SortDirection.Descending;
                    SortDir = "Desc";
                }
                else
                {
                    dir = SortDirection.Ascending;
                    SortDir = "Asc";
                }
                DataView sortedView = new DataView(dt);
                sortedView.Sort = e.SortExpression + " " + SortDir;
                Datagrid1.DataSource = sortedView;
                Datagrid1.DataBind();
            }
    }

    protected SortDirection dir
    {
        get
        {
            if (ViewState["dirState"] == null)
            {
                ViewState["dirState"] = SortDirection.Ascending;
            }
            return (SortDirection)ViewState["dirState"];
        }
        set
        {
            ViewState["dirState"] = value;
        }
    }
2
Ifwat Ibrahim

シンプルで、Allowsortingプロパティをtrueに設定し、グリッドビューに並べ替えイベントを追加します。

<asp:GridView ID="GridView1" runat="server" AllowSorting="true" 
      OnSorting="GridView1_Sorting">
</asp:GridView>   

次に、.csファイルにEventOnSortingを追加します

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{ 
    SetSortDirection(SortDireaction);
    if (dataTable != null)
    {
       dataTable.DefaultView.Sort = e.SortExpression + " " +_sortDirection;
        GridView1.DataSource = dataTable;
        GridView1.DataBind();
        SortDireaction = _sortDirection;
    }
} 
protected void SetSortDirection(string sortDirection)
{
    if (sortDirection == "ASC")
    {
        _sortDirection = "DESC";
    }
    else
    {
        _sortDirection = "ASC";
    }
} 
3
Shekhar Patel

ソート式が欠落していたこれらのコードを使用する必要があります

 <asp:DataGrid ID="Datagrid1" runat="server" AllowPaging="True" AllowSorting="True" OnSorting="ComponentGridView_Sorting">
    <Columns>
<asp:BoundColumn DataField="main_post" HeaderText="Header Post ID" SortExpression="main_post" />
</Columns>
    </asp:DataGrid>

それがあなたに役立つことを願っています。

1
Nayeem Mansoori

緊張の開発者を連れて行かないでくださいそれは本当に簡単すぎます私の手順に従ってください

ステップ1GridViewを作成します

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowPaging="true"  class="w3-table-all"
        OnPageIndexChanging="OnPageIndexChanging" PageSize="20" >
        <Columns>
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="250px" DataField="sn_no" HeaderText="ID" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="name" HeaderText="Name" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="mo" HeaderText="Mobile" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="email" HeaderText="Email Id" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="loc" HeaderText="Location" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="date" HeaderText="Date" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="day2" HeaderText="Day" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="date" HeaderText="Date" />
            <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="time" HeaderText="Time" />
        </Columns>

  </asp:GridView>

ステップ2 * .aspx.csファイルに移動して書き込みます

a)。降順の場合

cmd = new MySqlCommand("SELECT * FROM appointment ORDER BY sn_no DESC", con);

b)。昇順の場合

cmd = new MySqlCommand("SELECT * FROM appointment ORDER BY sn_no ASC", con);

愛を込めてありがとう#VaibhavYadav Vaibhav Designs http://vaibhavdesigns.org 詳細...

1
iRIS
    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="empid" DataSourceID="SqlDataSource1" EnableModelValidation="True" ForeColor="#333333" GridLines="None">
0
RAJESH RAJESH