我为我的公司开发了一个培训矩阵,向所有员工展示了公司提供的所有培训课程。现在,我必须以这样的方式开发它,以便管理员轻松编辑和更新。我做了一切都正确,除了一件事给每组课程一个特定的颜色(因为我有3种类型的课程)。仅供参考,我有两个SqlDataSource用于开发此矩阵:
SqlDataSource1用于检索GroupID:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT [ID] FROM [groups]"></asp:SqlDataSource>
SqlDataSource2将从SqlDataSource1获取GroupID并使用它来生成矩阵:
<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;
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);
修改
顺便说一句, 是否可以确定哪些细胞将用蓝色着色? 例如,在有#8个课程的组#1中,我想要着色从第四个单元格开始到最后一个单元格。然而,组#2有10个课程,我也希望着色从第四个单元格开始到最后一个单元格。 您可以帮我解决这个问题吗?
答案 0 :(得分:1)
请告诉您,您确定DataView中的第一个 DataRowViews 项目与您的查询中的 GroupId 相对应吗?您是否尝试将ToString()
方法应用于从最后一个代码段中的第一个DataRowView项检索的值,如下所示:
if (group[0].ToString().Equals("1"))
headerCell.BgColor = "Blue";
此外,要更改表格中行的颜色 - 您需要使用数据更改字段的颜色 - 甚至更改整行,而不是更改标题的颜色。
修改强>
要更改表格的数据字段背景颜色,您可以在填充表格时分配BgColor个实例的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);
// 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);