2010-07-25 51 views
0

我需要建立一個狀態儀表盤讀取事件(ID,說明,時間)從數據庫中,並提出一個標記上一天能夠深入細節,如果有一個事件 - 如果沒有事件,只是一個複選標記。就像http://www.google.com/appsstatus一樣。建設狀況日曆 - ASP.NET

我是一個小開發商難熬PHP的背景,我使用C#& ASP.NET。即使存在一些帶寬成本,我仍然選擇爲網格使用UpdatePanel/ScriptManager組件。

我的問題是關於建立這個表格的最佳方式。在PHP中,我會用一個字符串,然後不停通過嵌套的迭代添加HTML給它,如:

foreach($row in $rows){ 
MyHtml .= "<td>" . $variableFromDB[i] . "</td>"; 
i++ 
} 
return MyHtml; //Output built HTML 

在這種情況下,我需要查詢一個數組來看看如果事件存在的那一天,如果是的話,生成一個包含URL參數(field1 = value1 & field2)的鏈接,以便我可以顯示相應的詳細信息。

由於我使用的.NET,我想知道是否有一個更優雅的方式來做到這一點沒有查詢每個單元以檢查事件,並建立一個表更簡單的方法。我看到像「HtmlTableCell」&「HtmlTableRow」的.NET類,但我還沒有看到任何需要在每個單元格中查詢的引人注目的示例。

您的任何指導高級.NET鄉親將是巨大的......

回答

2

這聽起來像你想的網格或表格佈局顯示數據。如果是這種情況,並且您正在使用ASP.NET WebForms,請考慮使用GridView而不是手動構建HTML。 ASP.NET服務器控件的優點是能夠將您的業務對象集合從模型綁定到控件。

建議你不要跟着HtmlTableCellHtmlTableRow方法。通過使用服務器控件和數據綁定,您可以更快地完成這項工作。

以下是開始使用數據綁定幾步之遙。

  1. 在您的.aspx標記頁上,寫一個<asp:GridView runat=server id=statusCal>
  2. 確定要在網格上顯示的列。就像您手動創建的HTML表一樣,您想要顯示哪些數據?你會像這樣結束:
<asp:GridView ID="statusCal" AutoGenerateColumns="false" runat="server"> 
     <Columns> 
      <asp:BoundField DataField="Date" HeaderText="Status Date" /> 
      <asp:BoundField DataField="Status" HeaderText="Status" /> 
      <asp:BoundField DataField="UserName" HeaderText="User" /> 
      <asp:BoundField DataField="Email" HeaderText="Email" /> 
     </Columns> 
    </asp:GridView> 
  • 是您的數據從數據庫中來嗎?不知何故,你會想要一個課程來保存你的狀態日曆。無論你從哪裏獲取數據,你都需要有一個的課程將綁定到你的網格。也許是這樣的:
  • public class UserStatusCalendar 
    { 
        public string UserName {get;set;} 
        public string Email {get;set;} 
        public string Status {get;set;} 
        public string Date {get;set;} 
    } 
    

    然後,它的問題:

    1. 創建並填充你的UserStatusCalendar對象的數組或列表<>。
    List<UserStatusCalendar> show = new List<UserStatusCalendar>(); 
    show.Add(new UserStatusCalendar 
         { UserName="foo", Email="[email protected]", 
          Status="Good", Date="Jan 1 2010 10:09"}); 
    
  • 綁定您的集合到電網。
  • statusCal.DataSource = show; 
        statusCal.DataBind(); 
    

    當瀏覽網頁,你會看到你的網格顯示您的數據。您不必亂用任何HTML標記行。然後,您可以開始爲您的網格開發更爲出色的任務:創建<asp:HyperLink>字段而不是BoundFields,併爲GridView提供所有豐富的易於編輯支持。

    下面是一個工作測試應用程序來演示這些概念。將您的網頁命名爲test.aspx

    您將與該網格結束了:

    alt text

    +0

    謝謝,這是答案的類型我在尋找。我認爲它適用於細節視圖,但狀態網格不僅僅是數據庫的表示。該日曆涵蓋超過60天的5項服務,因此有300個單元 - 但可能只有3個事件,因此需要確定事件出現在哪個單元格中。基本上,每個單元格中的「if」語句都沒有辦法看到事件列表,對嗎? (如果這有什麼意義?:) – Timbo 2010-07-25 15:16:35

    +0

    @Timbo:理解你正在處理數據庫中的大量數據。我的建議是將'if'的這個邏輯移動到一個名爲類似於'CreateCalendarObjectsForDisplay()'的方法的類中,以便將源數據整形爲網格中的數據。我建議您的目標是您可以將數據塑造成設計時的外觀。希望你能夠最終顯示網格中所需的數據,而不是很多空白單元格(300寬)。這當然是你的要求的問題。 – 2010-07-25 15:21:45

    +0

    對於一個非常徹底的答案+1 ... – Timbo 2010-07-25 15:24:51