2012-02-15 39 views
2

我爲我公司開發了一個培訓矩陣,向所有員工展示了公司提供的所有培訓課程。現在,我必須以易於管理員編輯和更新的方式進行開發。我做了一切正確的事,除了一件事是給每組課程一個特定的顏色(因爲我有3種類型的課程)。僅供參考,我有兩個SqlDataSources發展此矩陣:如何訪問下面的SqlDataSource?

SqlDataSource1是提取羣ID:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
       SelectCommand="SELECT [ID] FROM [groups]"></asp:SqlDataSource> 

而SqlDataSource2將從SqlDataSource1採取羣ID,並用它來生成矩陣:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
              ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
              SelectCommandType="StoredProcedure" SelectCommand="kbiReport" FilterExpression="[Division] like '{0}%'"> 

          <SelectParameters> 
           <asp:Parameter Name="GroupID"/> 
          </SelectParameters> 

          <FilterParameters> 
           <asp:ControlParameter ControlID="ddlDivision" Name="DivisionName" 
                 PropertyName="SelectedValue" Type="String" /> 
          </FilterParameters> 

      </asp:SqlDataSource> 

現在,因爲我使用HTMLTABLE,我需要訪問SqlDataSource1做一些邏輯,如: 我f GroupID = 1,然後賦予該組藍色等等。但我不知道該怎麼做。 那麼你能幫我解決這個問題嗎?

我的代碼隱藏在C#:

protected void Page_Load(object sender, EventArgs e) 
    { 

     DataView dv2 = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty); 
     foreach (DataRowView group in dv2) 
     { 
      SqlDataSource2.SelectParameters[0].DefaultValue = group[0].ToString(); 
      //create a new HtmlTable object 
      HtmlTable table = new HtmlTable(); 

      DataView dv = (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty); 
      int columns = dv.Table.Columns.Count; 
      int rows = dv.Count; 

      //table's formating-related properties 
      table.Border = 2; 
      table.CellPadding = 3; 
      table.CellSpacing = 3; 
      table.Width = "900px"; 

      //to get the css style 
      table.Attributes["class"] = "uGrid"; 

      //create a new HtmlTableRow and HtmlTableCell objects 
      HtmlTableRow row; 
      HtmlTableRow header = new HtmlTableRow(); 
      HtmlTableCell cell; 


      //for adding the headers to the table 
      foreach (DataColumn column in dv.Table.Columns) 
      { 
       HtmlTableCell headerCell = new HtmlTableCell("th"); 
       headerCell.InnerText = column.Caption; 
       header.Cells.Add(headerCell); 
      } 
      table.Rows.Add(header); 

      //loop for adding rows to the table 
      foreach (DataRowView datarow in dv) 
      { 
       row = new HtmlTableRow(); 
       //row.BgColor = "yellow"; 


       //loop for adding cells 
       for (int j = 0; j < columns; j++) 
       { 
        cell = new HtmlTableCell(); 
        if (j < 4) 
        { 
         cell.InnerText = datarow[j].ToString(); 
        } 
        else 
        { 

         CheckBox checkbox = new CheckBox(); 

         int checkBoxColumns = dv.Table.Columns.Count - 5; 
         string fieldvalue = datarow[j].ToString(); 
         string yes = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[1]; 
         string courseid = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[0]; 
         checkbox.ID = row.Cells[3].InnerText + "," + courseid.Trim(); 
         checkbox.Checked = yes.Equals("Yes"); 
         cell.Controls.Add(checkbox); 

        } 

        //add the cell to the current row 
        row.Cells.Add(cell); 
       } 

       //add the row to the table 
       table.Rows.Add(row); 
      } 

      //add the table to the page 
      PlaceHolder1.Controls.Add(table); 

     } 
    } 

我試圖通過執行以下操作做到這一點,但我失敗了:

//for adding the headers to the table 
      foreach (DataColumn column in dv.Table.Columns) 
      { 
       HtmlTableCell headerCell = new HtmlTableCell("th"); 
       headerCell.InnerText = column.Caption; 
       if (group[0].Equals(1)){ 
        headerCell.BgColor = "Blue"; 
       else if (group[0].Equals(2)) 
        headerCell.BgColor = "Yellow"; 
       header.Cells.Add(headerCell); 
      } 
      table.Rows.Add(header); 

編輯:

順便說一句,是否可以確定哪些單元格將用藍色着色?例如,在組#1,其具有8個療程,我想着色從第四單元開始直到最後一個。然而,組2有10門課程,我也希望着色從第四個單元開始到最後一個。 你能幫我解決這個問題嗎?

回答

1

請告訴,你有沒有確保第一DataRowViews從您的數據視圖項對應的GroupId在查詢?而你嘗試過將ToString()方法珍惜你從DataRowView的的第一個項目,在過去的代碼片段檢索,就像在以下幾點:

if (group[0].ToString().Equals("1")) 
    headerCell.BgColor = "Blue"; 

此外,改變你行的顏色表 - 你需要改變顏色與數據的字段 - 甚至更好的整個行,而不是改變標題的顏色。

編輯:

要更改表中的數據字段的背景顏色,您可以指定HtmlTableCell實例BgColor財產而填充表 - 在下面這樣的:

 if (j < 4) 
     { 
      cell.InnerText = datarow[j].ToString(); 
     } 
     else 
     { 
      CheckBox checkbox = new CheckBox(); 

      int checkBoxColumns = dv.Table.Columns.Count - 5; 
      string fieldvalue = datarow[j].ToString(); 
      string yes = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[1]; 
      string courseid = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[0]; 
      checkbox.ID = row.Cells[3].InnerText + "," + courseid.Trim(); 
      checkbox.Checked = yes.Equals("Yes"); 
      cell.Controls.Add(checkbox); 

      // set field background color 
      if (group[0].Equals(1)){ 
       cell.BgColor = "Blue"; 
      else if (group[0].Equals(2)) 
       cell.BgColor = "Yellow"; 
      } 

編輯2:

要設置標題單元格的顏色,我建議使用等號運算符替換Equals方法的用法(從具有特定索引的列開始):

 //for adding the headers to the table 

     int counter = 0; 
     foreach (DataColumn column in dv.Table.Columns) 
     { 
      HtmlTableCell headerCell = new HtmlTableCell("th"); 
      headerCell.InnerText = column.Caption; 

      if (++counter >= 5) 
      { 
       if (int.Parse(group[0]) == 1){ 
        headerCell.BgColor = "Blue"; 
       else if (int.Parse(group[0]) == 2) 
        headerCell.BgColor = "Yellow"; 
       header.Cells.Add(headerCell); 
      } 
     } 
     table.Rows.Add(header); 
+0

非常感謝。我非常感謝你的幫助。順便說一下,是否可以確定哪些單元格將用藍色着色?例如,在有8門課程的小組#1中,我想讓着色從第四個單元開始到最後一個。然而,組2有10門課程,我也希望着色從第四個單元開始到最後一個。你能幫我解決這個問題嗎? – 2012-02-15 07:12:46

+0

@AliAhmed可以使用[BgColor](http://msdn.microsoft.com/en-US/library/system.web.ui.htmlcontrols.htmltablecell.bgcolor%28v=vs)更改表格字段的顏色。 80%29.aspx)HtmlTableCell類的屬性。您可以在您通過DataView循環的代碼片段中的「if」運算符的「else」塊中分配它。在你的thrird代碼片段附近添加單元格附近的註釋'/ /創建HtmlTable的地方。 – 2012-02-15 07:55:26

+0

謝謝,但我說的是標題單元格而不是行單元格。你能否給我提供代碼片段? – 2012-02-15 07:59:55