📜  como ordenar dados na gridview c# (1)

📅  最后修改于: 2023-12-03 15:30:04.378000             🧑  作者: Mango

如何在 C# 中对 GridView 进行数据排序

GridView 是一个常见的 ASP.NET Web Forms 控件,用于显示数据。该控件允许用户对数据进行排序,使得浏览数据更加方便。在本文中,我们将介绍如何在 C# 中对 GridView 进行数据排序。

实现思路
  • 根据用户所点击的列名称,获取对应的字段名称。
  • 根据字段名称和排序方式对数据进行排序。
  • 将排序后的数据重新绑定到 GridView 上。
代码实现
1. 添加排序按钮

在 GridView 上添加排序按钮,用于触发排序事件。代码如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField HeaderText="ID" DataField="ID" SortExpression="ID" />
        <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" />
        <asp:BoundField HeaderText="Age" DataField="Age" SortExpression="Age" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnSort" runat="server" Text="Sort" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

以上代码将生成一个包含三个绑定字段和一个排序按钮的 GridView。

2. 编写排序事件

使用以下代码,为 GridView 的排序按钮注册事件:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Sort"))
    {
        // 获取点击的按钮所在的行
        GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);

        // 获取要排序的列名称
        string sortExpression = GridView1.Columns[row.Cells.GetCellIndex((TableCell)((Button)e.CommandSource).Parent)].SortExpression;

        // 获取排序方式
        SortDirection sortDirection;
        if (ViewState["sortDirection"] == null)
        {
            sortDirection = SortDirection.Ascending;
            ViewState["sortDirection"] = sortDirection;
        }
        else
        {
            sortDirection = (SortDirection)ViewState["sortDirection"];
            sortDirection = sortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
            ViewState["sortDirection"] = sortDirection;
        }

        // 根据字段名称和排序方式对数据进行排序
        DataTable dt = GetData();
        DataView dv = new DataView(dt);
        dv.Sort = sortExpression + (sortDirection == SortDirection.Ascending ? " ASC" : " DESC");

        // 将排序后的数据重新绑定到 GridView 上
        GridView1.DataSource = dv;
        GridView1.DataBind();
    }
}

该方法首先获取用户点击的按钮所在的行,然后从该行中获取字段名称。接下来,获取排序方式并对数据进行排序,最后将排序后的数据重新绑定到 GridView 上。

3. 定义获取数据的方法

最后,我们需要定义一个方法,用于获取 GridView 的数据源。在本文中,我们使用以下代码获取一组示例数据:

private DataTable GetData()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Age", typeof(int));

    dt.Rows.Add(1, "张三", 25);
    dt.Rows.Add(2, "李四", 30);
    dt.Rows.Add(3, "王五", 20);
    dt.Rows.Add(4, "赵六", 28);
    dt.Rows.Add(5, "陈七", 22);

    return dt;
}
结论

本文介绍了如何在 C# 中对 GridView 进行排序。使用以上代码,您可以为 GridView 添加排序按钮,并允许用户对数据进行排序。