0

以下のコードをインターネットから取得しました。正常に動作しています。ページングも追加しました。ソートしているときは、正しく機能しています。ページ インデックスを変更すると、並べ替えが失われます。

サーバー側コードの「GridView1_Sorting」メソッドにリンクされた並べ替えを使用して、ページあたり 20 項目のグリッドビューを設定するクライアント側コードを次に示します。

クライアント側

<asp:GridView ID="GridView1" runat="server" DataKeyNames="eno" AutoGenerateColumns="False" PageSize="20" AllowPaging="True" AllowSorting="True" OnSorting="GridView1_Sorting" CellPadding="4">
    <Columns>
        <asp:TemplateField HeaderText="Employee no" SortExpression="eno">
            <ItemTemplate>
                <%#Eval("eno")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Emp name" SortExpression="empname">
            <ItemTemplate>
                <%#Eval("empname")%>
            </ItemTemplate> 
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Salary" SortExpression="sal">
            <ItemTemplate>
                <%#Eval("sal")%>
            </ItemTemplate> 
        </asp:TemplateField>
    </Columns>
</asp:GridView>

そして今、サーバー側のコード:

サーバ側

using System.Data.SqlClient;
using System.Configuration;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);
    SqlCommand sqlcmd;
    SqlDataAdapter da;
    DataTable dt = new DataTable();
    DataTable dt1 = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridData();
        }
    }

    void GridData()
    {
        sqlcmd = new SqlCommand("select * from emp", sqlcon);
        sqlcon.Open();
        da = new SqlDataAdapter(sqlcmd);
        dt.Clear();
        da.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            Session["dt"] = dt;
            GridView1.DataSource = dt;
            GridView1.DataBind();
        } 
    } 

    private string GVSortDirection
    {
        get { return ViewState["SortDirection"] as string ?? "DESC"; }
        set { ViewState["SortDirection"] = value; }
    }

    private string GetSortDirection()
    {
        switch (GVSortDirection)
        { 
            case "ASC":
                GVSortDirection = "DESC";
                break;

            //assign new direction as ascending order
            case "DESC":
                GVSortDirection = "ASC";
                break;
        }

        return GVSortDirection;
    }

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = (DataTable)Session["dt"];
        if (dataTable != null)
        { 
            DataView dataView = new DataView(dataTable); 
            string sortDirection = GetSortDirection(); 
            dataView.Sort = e.SortExpression + " " + sortDirection; 
            GridView1.DataSource = dataView;
            GridView1.DataBind();
        }
    } 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridData();
    }
}
4

3 に答える 3

1

GetSortDirectionを使用してSortDirectionを維持する方法は、同じ方法でSortExpressionを維持します。

ハッピーコーディング!!!

于 2012-10-05T10:42:07.747 に答える
1

ページングすると、PageIndexChanging イベントが呼び出されます。次に GridData() プロシージャが実行され、グリッドビューのデータ ソースが emp テーブルのレコードを含むデータ テーブルに設定されます。特定の並べ替え順序はありません。

GridView1_Sorting イベント ハンドラーに記述したコードを取得し、これを GridData ルーチンに含めて、グリッドにデータが入力されるたびに (ページが最初に読み込まれたとき、ページ インデックスが読み込まれたとき)、が変更された場合、またはグリッドビューが並べ替えられた場合 - グリッドビューは、並べ替えられていないデータ テーブルではなく、並べ替えられたデータビューに基づいています。

于 2012-10-05T09:52:50.400 に答える
0

この記事を読んで、あなたが望むものを手に入れることができますように

于 2012-10-05T09:58:41.080 に答える