ASP.. NET GridView排序实现事件处理

本文关键字:实现 事件处理 排序 GridView NET ASP | 更新日期: 2023-09-27 18:19:12

谁能分享一下如何实际实现gridview排序和处理事件,如果:

  1. 手动绑定数据
  2. Gridview是使用模板字段构建的,该字段仅从后面的代码中抽取(而不是从标记中抽取)

我只从代码后面构建我的gridview,因此我不能使用默认的方法或解决方案。

谢谢

ASP.. NET GridView排序实现事件处理

这可能就是你要找的:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    listBindByName(); //this would be your procedure to look for the data you want
    DataSet dsSortTable = GridView1.DataSource as DataSet;
    DataTable dtSortTable = dsSortTable.Tables[0];
    if (dtSortTable != null)
    {
        DataView dvSortedView = new DataView(dtSortTable);
        dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString();
        ViewState["sortExpression"] = e.SortExpression;
        GridView1.DataSource = dvSortedView;
        GridView1.DataBind();
    }
    UpdatePanel1.Update();
}
private string getSortDirectionString()
{
    if (ViewState["sortDirection"] == null)
    {
        ViewState["sortDirection"] = "ASC";
    }
    else
    {
        if (ViewState["sortDirection"].ToString() == "ASC")
        {
            ViewState["sortDirection"] = "DESC";
            return ViewState["sortDirection"].ToString();
        }
        if (ViewState["sortDirection"].ToString() == "DESC")
        {
            ViewState["sortDirection"] = "ASC";
            return ViewState["sortDirection"].ToString();
        }
    }
    return ViewState["sortDirection"].ToString();
}

这是TemplateField的一个例子:

<asp:TemplateField HeaderText="Description" SortExpression="description">
    <ItemTemplate>
        <asp:Label Visible="true" runat="server" ID="descriptionLabel" Text='<%# bind("description")  %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="txtEditDescription" Width="100px" runat="server" Text='<%#Bind("description") %>' />
    </EditItemTemplate>
</asp:TemplateField>

通过添加SortExpression属性,GridView头将变得可点击。确保排序表达式属性是要通过sql查询绑定的字段的名称。

/* Best to use the shortened routine below - which can be further shortened */        
private string GetSortDirectionString()
{
    if (ViewState["sortDirection"] == null) ViewState["sortDirection"] = "ASC";
    var currDir = ViewState["sortDirection"].ToString().ToUpper();
    switch (currDir)
    {
        case "ASC": ViewState["sortDirection"] = "DESC"; break;
        case "DESC": ViewState["sortDirection"] = "ASC"; break; 
    }
    return ViewState["sortDirection"].ToString();
}

asp .net中的网格视图排序

第一步

编辑源代码,添加allow排序 true,并在排序

时通过启动事件
<asp:GridView ID="GridView1" AllowSorting="true" OnSorting="GridView1_Sorting"  runat="server">
    </asp:GridView>
第二步

在后面的代码页..我们需要处理这个事件"GridView1_Sorting"和数据表绑定。在页面加载时,我们将绑定数据表和gridview

 dt = Class1.getDataSet().Tables[0]; // here dt is the datatable object declared Globally.
 GridView1.DataSource = dt; 
 GridView1.DataBind();

所以现在如果我们运行我们的代码,网格视图将是可见的,但没有排序。

第三步

接下来我们需要处理Gridview排序事件。首先我们需要声明一个静态字符串SortDirection。

 protected void SetSortDirection(string sortDirection)
        {
            if (sortDirection == "ASC")
            {
                _sortDirection = "DESC";
            }
            else
            {
                _sortDirection = "ASC";
            }
        } 

所以sortDirection是一个静态字符串…我们用这个函数在升序和降序之间切换…步骤4

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        SetSortDirection(SortDirection);
        if (dt != null)
        {
            //Sort the data.
            dt.DefaultView.Sort = e.SortExpression + " " + _sortDirection;
            GridView1.DataSource = dt;
            GridView1.DataBind();
            SortDireaction = _sortDirection;
        }
    }

所以我们已经完成了排序....sortExpression就是列名