2016-06-22 32 views
0

我有一个网站开发使用ASP.Net和C#,它从Active Directory获取输入并在网站的HTML表格中打印数据。代码如下所示:C#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); 
     //} 

    } 

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

任何输入,将不胜感激。谢谢

+0

这个问题的答案太多了。在构建表之前是否要对数据进行排序,或者您是否想要一个可以单击标题进行排序的表? –

+0

是否有理由不将结果排序为获取数据的查询的一部分? –

回答

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); 
     } 
+0

对不起新手,但我在哪里添加:c.InnerHtml = sortedItems [i] .Name;线?我会想象它是在for循环的结尾,但它给不能索引的错误。 –

+0

没问题,只是用您的代码替换以显示它的样子。 –

+0

太棒了,那就是诀窍。现在我明白了。感谢帮助,并会给你一个点,一旦我打到15代表。 –