首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未设置SortExpression和SortDirection的ListView排序

未设置SortExpression和SortDirection的ListView排序
EN

Stack Overflow用户
提问于 2012-10-04 00:27:56
回答 2查看 2.7K关注 0票数 4

我正在开发一个ListView,我感觉在实现排序时,我正在做一些根本错误的事情。我求助于隐藏字段,而不是依赖于List1.SortExpressionList1.SortDirection的值,因为List1.SortExpression始终为空,而List1.SortDirection始终为SortDirection.Ascending

在我的.aspx页面上:(编辑掉不相关的代码)

代码语言:javascript
复制
<asp:HiddenField runat="server" ID="hdnSortExpression" />
<asp:HiddenField runat="server" ID="hdnSortDirection" />

<asp:ListView runat="server" ID="List1"  
    OnItemCommand="List1_ItemCommand"
    OnSorting="List1_Sorting">
<LayoutTemplate>
    <table border="0" cellpadding="1">
    <thead>
    <tr>
        <th><asp:LinkButton runat="server" ID="BtnCompanyCode" CommandName="Sort" CommandArgument="CompanyCode" Text="Company Code" /></th>
        ... more columns ...
    </tr>
    </thead>

    <tbody>
        <tr runat="server" id="itemPlaceholder"></tr>
    </tbody>
    </table>
</LayoutTemplate>

在我的代码背后:

代码语言:javascript
复制
protected void List1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    // empty for now
}

protected void List1_Sorting(object sender, ListViewSortEventArgs e)
{
    SortDirection sortDirection;
    String sortExpression = e.SortExpression;   // how we need to do it in Sorting

    if (hdnSortExpression.Value.ToLower() == sortExpression.ToLower())
        sortDirection = hdnSortDirection.Value == SortDirection.Ascending.ToString() ? SortDirection.Descending : SortDirection.Ascending;
    else
        sortDirection = SortDirection.Ascending;

    DoSortList(sortExpression, sortDirection);  // this sets column headings' sort indicator arrows
    List1_BindData(sortExpression, sortDirection);  // sets DataSource and calls DataBind()

    // the hacky part: setting hidden fields to store sortExpression and sortDirection
    hdnEligibilitySortExpression.Value = sortExpression;
    hdnEligibilitySortDirection.Value = sortDirection.ToString();
}

private void List1_BindData(String sortExpression, SortDirection sortDirection)
{
    List<SomeEntity> list = null;

    list = SomeEntity.GetBySsn(_ssn).ToList();  // methods generated by an ORM pointing to an Oracle database

    switch (sortExpression.ToLower())
    {
        case "CompanyCode":
        if (sortDirection == SortDirection.Ascending)
            List1.DataSource = list.OrderBy(o => o.CompanyCode);
        else
            List1.DataSource = list.OrderByDescending(o => o.CompanyCode);
        break;

        ... other cases ...
    }

    List1.DataBind();
}

它是有效的--每一列都得到了正确的排序,单击相同的列会颠倒排序方向,但我必须得出结论,因为我不能依赖SortDirectionSortExpression属性,所以我错误地连接了这些内容。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-04 00:55:31

看看这个MSDN example。您将注意到DataSource是一个SqlDataSource。这是.Net知道如何排序的DataSource类型之一。其他人,就没那么多了。

下面是另一个指定DataSource类型的MSDN article

为排序提供内置支持的数据源控件有LinqDataSource、ObjectDataSource、SqlDataSource和AccessDataSource控件。

票数 2
EN

Stack Overflow用户

发布于 2012-10-04 00:43:00

你能不能像List1.SortDirection和List1.SortExpression一样把它从ListView中拉出来,而不是使用e.SortDirection?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12712787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档