2016-06-22 2 views
0

私は、ASP.NetとC#を使用して開発したWebサイトを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(); 

次に、あなたは(あなたのforループの条件を含む)sortedItemsを使用するために、すべての値を更新。たとえば:あなたはいくつかのオプションをチェックアウトし、特定のパスを下る起動したら、クライアントレベルであなたのテーブルをソートするよう

c.InnerHtml = sortedItems[i].Name; 

は、私はその上に新しい質問を開くことをお勧めしたいです。 Angular、JQueryなどのプラグインでは、他にも多くのオプションがあります。あなたのループ内で更新を行うとサンプルコードに

を表示するように

UPDATE。あなたのコードに変更があります。

 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

newbnessに申し訳ありませんが、どこに追加しますか:c.InnerHtml = sortedItems [i] .Name;ライン?私はそれがforループの終わりにあると思いますが、それはインデックスエラーを適用することはできません与える。 –

+0

問題はありません。ちょうどあなたのコードに置き換えて、どのように見えるかを示しました。 –

+0

素晴らしい、それはトリックでした。今私はそれを見る意味をなさない。助けを感謝し、私が15のレーティングを務めたら、あなたにポイントを与えるでしょう。 –

関連する問題