【问题标题】:C# html table sortC# html 表格排序
【发布时间】:2016-06-23 03:26:42
【问题描述】:

我有一个使用 ASP.Net 和 C# 开发的网站,它从 Active Directory 获取输入并将数据打印在网站的 HTML 表中。代码如下所示:

void SetupResults(SearchDataItems items)
    {

       HtmlTable t = new HtmlTable();
        HtmlTableRow r = new HtmlTableRow();
        HtmlTableCell c = new HtmlTableCell();




        c.VAlign = "center";
        c.Align = "middle";
        c.Width = "200px";
        c.InnerHtml = "User";
        r.Cells.Add(c);

        c = new HtmlTableCell();
        c.VAlign = "center";
        c.Align = "middle";
        c.Width = "180px";
        c.InnerHtml = "UserId";
        r.Cells.Add(c);

        c = new HtmlTableCell();
        c.VAlign = "center";
        c.Align = "middle";
        c.Width = "800px";
        c.InnerHtml = "Location";
        r.Cells.Add(c);

        c = new HtmlTableCell();
        c.VAlign = "center";
        c.Align = "middle";
        c.Width = "280px";
        c.InnerHtml = "Date Created";
        r.Cells.Add(c);

        c = new HtmlTableCell();
        r.Cells.Add(c);

        r.Style.Add("background-color", "SteelBlue");
        r.Style.Add("color", "white");
        r.Style.Add("font-size", "medium");

        tblItems.Rows.Add(r);





        for (int i = 0; i < items.ListItem.Count; i++)
        {

            r = new HtmlTableRow();

            if (i % 2 == 1)
                r.BgColor = "#A9D0F5";

            c = new HtmlTableCell();

            LinkButton lnk = null;

            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "200px";
            c.InnerHtml = items.ListItem[i].Name;
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "180px";
            c.InnerHtml = items.ListItem[i].UserID;
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "800px";
            c.InnerHtml = StripOUGarbage(items.ListItem[i].OU);
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "280px";
            c.InnerHtml = items.ListItem[i].AccountCreateDate.ToString();
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            lnk = new LinkButton();
            lnk.Text = "Edit";
            lnk.ToolTip = "Edit " + items.ListItem[i].Name;
            lnk.ID = i.ToString() + "_" + items.ListItem[i].Name;
            lnk.Click += lnk_Click;
            lnk.OnClientClick = "ShowProgress();";
            c.Controls.Add(lnk);
            r.Cells.Add(c);


            tblItems.Rows.Add(r);
        }

        //if (items.ListItem.Count > 0)
        //{
        //    divTable.Controls.Add(t);
        //}

    }

它运行并返回信息正常,但排序已关闭。它主要按用户创建日期返回(尽管那里似乎也存在一些不一致)。我希望它按用户名的字母顺序返回,有没有办法自动对这些列进行排序,或者能够让用户通过单击列标题对它们进行排序也很好。

任何意见将不胜感激。谢谢

【问题讨论】:

  • 这个问题的潜在答案太多了。您是想在构建表格之前对数据进行排序,还是真的想要一个可以单击标题进行排序的表格?
  • 您是否有理由不将结果作为获取数据的查询的一部分进行排序?
  • 可能需要可配置

标签: c# asp.net html-table


【解决方案1】:

要在服务器级别按名称排序(实际上是您的默认排序),只需在 for 循环构建表之前添加此行。

var sortedItems = items.ListItem.OrderBy(m => m.Name).ToList();

然后您更新所有值以使用 sortedItems(包括您的 for 循环的条件)。例如:

c.InnerHtml = sortedItems[i].Name;

至于在客户端级别对您的表格进行排序,我建议您在检查了几个选项并开始沿着特定路径前进后提出一个新问题。有了 Angular、JQuery 插件等,还有很多其他的选择。

更新以显示示例代码

您将在循环中进行更新。这是您的更改代码。

        var sortedItems = sortedItems.OrderBy(m => m.Name).ToList();
        for (int i = 0; i < sortedItems.Count; i++)
        {

            r = new HtmlTableRow();

            if (i % 2 == 1)
                r.BgColor = "#A9D0F5";

            c = new HtmlTableCell();

            LinkButton lnk = null;

            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "200px";
            c.InnerHtml = sortedItems[i].Name;
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "180px";
            c.InnerHtml = sortedItems[i].UserID;
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "800px";
            c.InnerHtml = StripOUGarbage(sortedItems[i].OU);
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            c.Width = "280px";
            c.InnerHtml = sortedItems[i].AccountCreateDate.ToString();
            r.Cells.Add(c);

            c = new HtmlTableCell();
            c.VAlign = "Top";
            c.Align = "Left";
            lnk = new LinkButton();
            lnk.Text = "Edit";
            lnk.ToolTip = "Edit " + sortedItems[i].Name;
            lnk.ID = i.ToString() + "_" + sortedItems[i].Name;
            lnk.Click += lnk_Click;
            lnk.OnClientClick = "ShowProgress();";
            c.Controls.Add(lnk);
            r.Cells.Add(c);


            tblItems.Rows.Add(r);
        }

【讨论】:

  • 抱歉新手,但我在哪里添加:c.InnerHtml = sortedItems[i].Name;线?我想它在 for 循环的末尾,但它给出了一个无法应用索引错误。
  • 没问题,只是用您的代码替换以显示它的样子。
  • 太棒了,成功了。现在我明白了。感谢您的帮助,一旦我达到 15 个代表,就会给你一分。
猜你喜欢
  • 2019-04-17
  • 2012-07-03
  • 2019-03-16
  • 1970-01-01
  • 2017-11-06
  • 2016-09-09
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多