gpt4 book ai didi

c# - 如何访问下面的SqlDataSource?

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:02 25 4
gpt4 key购买 nike

我为我的公司开发了一个培训矩阵,向所有员工展示公司提供的所有培训类(class)。现在,我必须以易于管理员编辑和更新的方式开发它。我做的一切都是正确的,除了一件事是给每组类(class)一个特定的颜色(因为我有 3 种类型的类(class))。仅供引用,我有两个用于开发此矩阵的 SqlDataSources:

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);

编辑:

顺便问一下,是否可以确定哪些单元格将被涂上蓝色?例如,在第 1 组中有 8 个类(class),我想要着色从第四个单元格开始直到最后一个单元格。而 Group#2 有 10 门类(class),我也希望着色从第四个单元格开始到最后一个单元格。 你能帮我解决这个问题吗?

最佳答案

请告诉我,您是否确保您的 DataView 中的第一个 DataRowViews 项对应于您查询中的 GroupId?您是否尝试过将 ToString() 方法应用于您从最后一个代码片段中的 DataRowView 第一项检索到的值,如下所示:

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

此外,要更改表格中行的颜色 - 您需要更改包含数据的字段的颜色 - 甚至更好的是整行,而不是更改标题的颜色。

编辑:

要更改表的数据字段背景颜色,您可以分配 BgColor HtmlTableCell的属性(property)填充表时的实例 - 如下所示:

        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);

关于c# - 如何访问下面的SqlDataSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com