GridObjectDataSource DataTable使用参数

时间:2015-07-22 16:13:45

标签: c# asp.net gridview

我的麻烦是我不知道如何传递事件来对我的DataTable进行排序。 我列出了.aspx页面,以及BindThrottles函数后面.cs文件的流程。我正在寻找一个使用DataTable的简单解决方案。我看到其他代码看起来很简单,使用了我最后发布的事件,但不知道如何使用该表单。

我的.aspx页面配置为..

<asp:ObjectDataSource ID="GridObjectDataSource" 
    runat="server"  SelectMethod="BindThrottles"                                                            
    TypeName="WebsiteNamespace.ThrottleInterval" 
    SortParameterName="SortBy">

  <SelectParameters>
    <asp:ControlParameter ControlID="gvThrottles" 
         Name="sortDirection" PropertyName="SortDirection" />
  </SelectParameters>

</asp:ObjectDataSource>

<asp:GridView   ID="gvThrottles" AllowSorting="True" runat="server" 
    DataKeyNames="UserID" DataSourceID="GridObjectDataSource"
>

 <Columns>
  <asp:TemplateField HeaderText="USERID" SortExpression="USERID">
      <ItemTemplate>
          <asp:Label ID="lblItemUserId" runat="server" 
              Text='<%# Eval("USERID") %>'></asp:Label>             
      </ItemTemplate>
  </asp:TemplateField>
  <asp:TemplateField HeaderText="Requests" SortExpression="REQUESTS">
      <ItemTemplate>
          <asp:Label ID="lblItemNumRequests" runat="server" 
              Text='<%# Eval("REQUESTS") %>'></asp:Label>              
      </ItemTemplate>
 </Columns>  

</asp:GridView>

我的BindThrottles方法已配置......

public DataTable BindThrottles(string SortBy, int sortDirection){

    //..code to run queries from MongoDB
    //..code to create columns and rows of DataTable
    //..code to fill the rows with the data from the MongoDB

    *************************************************************
    //.. I need some code here to let my DataTable sort on 
    //.. the column header link for Asc or Desc.
    *************************************************************
}

我看到另一个显示代码的stackoverflow帖子......

dt.DefaultView.Sort = e.SortExpression + " " +
    GetSortDirection(e.SortExpression);

并将GetSortDirection配置为

public string GetSortDirection(string column)
    {

        // By default, set the sort direction to ascending.
        string sortDirection = "ASC";

        // Retrieve the last column that was sorted.
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }
        // Save new values in ViewState.
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

但是我不知道如何将它变成一种形式,可以使用事件在已经设置了非事件参数的函数内进行排序,或者是否有更好的方法对ASC和DESC进行排序通过列标题链接。

其他信息:   我是ASP的新手。我继承了这个项目,这就是为什么这个函数目前仍然被称为BindThrottles,甚至认为我试图消除绑定(同事的建议)。

1 个答案:

答案 0 :(得分:0)

在此函数中,SortExpression是列名,SortDirection是排序顺序,即(升序或降序)。由于这两个值都存储在ViewState中,因此您可以在任何事件中使用它。您可以像这样使用此函数:

    DataView dv = new DataView(dtTable);
    dv.Sort = columnName + " " + GetSortDirection(columnName);
    GridView1.DataSource = dv;
    dtTable = dv.ToTable();
    GridView1.DataBind();

其中dtTable是DataTable