2012-02-15 115 views
2

我为我公司开发了一个培训矩阵,向所有员工展示了公司提供的所有培训课程。现在,我必须以易于管理员编辑和更新的方式进行开发。我做了一切正确的事情,除了从第四个单元开始到最后一个单元为每组课程提供特定颜色(因为我有3种类型的课程)。仅供参考,我有两个SqlDataSources发展此矩阵:如何为HTML表格中的某些特定单元格着色?

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做一些逻辑,如: 如果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; 

       //The following if-else statements are for checking the GroupID and give each group 
       //a specific color 
       if (group[0].ToString().Equals("1")) 
        headerCell.BgColor = "lightBlue"; 
       else if (group[0].ToString().Equals("2")) 
        headerCell.BgColor = "lightYellow"; 
       else if (group[0].ToString().Equals("3")) 
        headerCell.BgColor = "Orange"; 

       //the header cells to the header 
       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; 

       //The following if-else statements are for checking the GroupID and give each group 
       //a specific color 
       if (group[0].ToString().Equals("1")) 
        headerCell.BgColor = "lightBlue"; 
       else if (group[0].ToString().Equals("2")) 
        headerCell.BgColor = "lightYellow"; 
       else if (group[0].ToString().Equals("3")) 
        headerCell.BgColor = "Orange"; 

       //the header cells to the header 
       header.Cells.Add(headerCell); 
      } 
      table.Rows.Add(header); 

回答

2

我会解决它使用ListView控件来建立html表。使用ListView控件,您可以访问OnItemDataBound属性,您可以使用该属性编写代码以为需要的特定行着色。

相关问题