【问题标题】:ASP.NET Dynamic Data Site: Force First Column to be AlphabetizedASP.NET 动态数据站点:强制第一列按字母顺序排列
【发布时间】:2013-03-13 17:02:08
【问题描述】:

我在这里部署了一个 ASP.NET 动态数据站点:https://ess.orthman.com/PhoneListWeb/

可以通过单击列名称来按字母顺序排列列,但如何设置网站自动按字母顺序排列第一列?

【问题讨论】:

  • 我还没有尝试过任何东西。我什至不知道从哪里开始。我假设它位于列表、详细信息、编辑或插入模板上的动态数据文件夹中的某个位置。但我找不到任何看起来很接近的东西。
  • 第一列的数据是怎么拉进来的?
  • Linq to SQL Classes .dbml 文件

标签: c# asp.net asp.net-dynamic-data


【解决方案1】:

您有许多可用选项,具体取决于您想要订购哪台机器。

1.您可以在数据库服务器上创建一个存储过程,它将SELECT * FROM ... ORDER BY ... 并在您的.dbml 中使用它

2.您提到您正在使用从 .dbml 生成的 Linq to SQL 类,所以我假设您在 .aspx 页面中使用 LinqDataSource

在您的设计器中,您可以在 LinqDataSource 上选择配置数据源:

然后您从 .dbml 中选择您的上下文,在下一个屏幕上您可以选择 Order By:

3. 使用Dynamic Data Web Site 在设计时您没有特定表结构的优势。因此,您需要创建一个将在运行时发生的排序。您可以编辑您的 DynamicData\PageTemplates\List.aspx.cs 以包含以下内容:

protected void Page_Load(object sender, EventArgs e)
{
    Title = table.DisplayName;

    // Disable various options if the table is readonly
    if (table.IsReadOnly)
    {
        GridView1.Columns[0].Visible = false;
        InsertHyperLink.Visible = false;
        GridView1.EnablePersistedSelection = false;
    }

    // Add our sort to the first data column.
    if (!Page.IsPostBack)
    {
        GridView1.Sort(table.Columns[0].Name, SortDirection.Ascending);
    }
}

【讨论】:

  • 当您说“在您的设计器中,您可以在 LinqDataSource 上选择配置数据源:”在项目中的哪个页面上?
  • 如果你需要我可以给你一个压缩的项目文件。
  • @CryptoJones 在阅读并创建测试项目后,我添加了另一个选项。看起来您可以在选项 1 或 3 之间进行选择,而选项 2 并不真正适用于您的情况。
  • “/”应用程序中的服务器错误。无法找到该资源。说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。请求的 URL:/DynamicData/PageTemplates/List.aspx
  • 我正在使用 Ctrl+F5 运行测试站点。我不知道为什么它看起来像它看起来的地方。 NVm:那是因为我在那个页面上按了 F5。我的错。
【解决方案2】:

第一个简单的答案是对您的数据源进行排序
在获取数据(表单 DB)之前使用 order by 或在获取对象之后使用 linq 排序 ...

【讨论】:

  • 您在使用数据库吗?如果是,您使用的是 ADO.Net 还是 Eetity 框架或 Hibernate?
【解决方案3】:

从 dbml 绑定数据后 您可能有一个 linq 语句来将数据绑定到 Grid 或 List。

编写与 Same 类似的代码。

在下面的示例代码中,我刚刚添加了绑定数据的排序

按公司名称升序排序

var Company = from Company in _c.Company_Name
             orderby _c.Company_Name 
             select Company;

按公司名称降序排列

var Company = from Company in _c.Company_Name
             orderby _c.Company_Name descending
             select Company;

试试这个希望它会有所帮助

【讨论】:

    【解决方案4】:

    您可以使用 DisplayColumnAttribute 来指定应该用于排序的列。有一种简单易行的排序方法,还有一种更复杂、更强大的方法。我会给你两个。

    首先是简单的方法,展示如何对实体进行排序的示例。在此示例中,地址表(父表)中的 PostalCode 列用于对地址进行排序。

    using System;
    using System.Web.DynamicData;
    using System.ComponentModel.DataAnnotations;
    using System.Globalization;
    
    [DisplayColumn("City", "PostalCode", false)]
    public partial class Address
    {
    
    }
    

    如果您的排序需求更复杂,请尝试 C# Bits 博客中的这种更强大的方法:Setting the initial sort order

    此链接记录了DisplayColumnAttribute

    【讨论】:

      【解决方案5】:

      如果您使用的是ASP.NET 4.0,您可以考虑使用GridView 的AllowSorting = true 和新的与排序相关的样式属性SortedAscendingHeaderStyle 和其他。

      .ASPX 的示例:

      <asp:GridView 
          ID="gvOffices" 
          runat="server" 
          DataSourceID="GridDataSource"
          AllowPaging="true" 
          AllowSorting="true" 
          PageSize="10" 
          CssClass="listtable" 
          AutoGenerateColumns="false"
          EnablePersistedSelection="true"
          OnSelectedIndexChanged="OnFilterSelectedIndexChanged"
          SortedAscendingHeaderStyle-CssClass="sortasc-header" 
          SortedDescendingHeaderStyle-CssClass="sortdesc-header">
      </asp:GridView>
      

      .CSS 的示例:

      /*#region Table Header Sort Image */
      .sortasc-header a {
          background: url(Images/arrowup.gif) right center no-repeat;
      }
      
      .sortdesc-header a {
          background: url(Images/arrowdown.gif) right center no-repeat;
      }
      /*#endregion Table Header Sort Image */
      

      AllowSorting 提示 GridView 使用 LinkButton 控件呈现其标题行,当单击该控件时,会导致回发并启动排序过程。并且新属性允许根据当前顺序定义列标题的视觉外观。

      您可以在MSDN找到更多信息。

      编辑:

      如果您只想按第一列排序,则应将其他列的DynamicField控件的SortExpression属性设置为空白。

      <asp:DynamicField DataField="ListCity" HeaderText="City" SortExpression="" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2021-06-25
        • 2018-02-18
        • 1970-01-01
        相关资源
        最近更新 更多