0

目标:目标是根据数据表中的文本值动态设置 System.Drawing.Color。文本值是 System.Drawing.Color 中颜色的名称。目的是根据给定值更改网格的背景颜色。

问题:我现在使用的方法没有从数据表中获取值并将颜色设置为 0,0,0,0。数据表是使用 ViewState 创建的。我对这个问题进行的研究表明这应该有效。但是,从 DataTable 获得的值是 "" 。这段代码有什么不正确的?预先感谢您的意见、建议和考虑。代码如下:

数据表代码

private void CreateList()
{
    DataTable dtMyList = new DataTable();

    DataColumn dcID = new DataColumn("ID");
    dtMyList.Columns.Add(dcID);

    DataColumn dcColor = new DataColumn("Color");
    dtMyList.Columns.Add(dcColor);

    ViewState["MyList"] =  dtMyList;

 }   

在旨在更改背景色的 RowDataBound 代码上

protected void grdMyList_RowDataBound(object sender, GridViewEventsArgs e)
{
    DataTable dtMyList = (DataTable)ViewState["MyList"];

    for (int i = 0; i < dtMyList.Rows.Count; i++)
    {
        e.Row.Cells[0].BackColor = System.Drawing.Color.FromName(Convert.ToString(dtMyList.Rows[0]["Color"]));

    }
}
4

2 回答 2

1

首先:数据表中是否填充了任何数据?

第二:您试图用数据表中的所有颜色填充那一行(在事件 args 中给出),导致只有一个属性 ( e.Row.Cells[0].BackColor) 填充了来自表 ( dtMyList.Rows[i]["Color"]) 中最后一行的颜色。

我认为您应该首先查找附加到网格行(e.Row.DataItem)的正确数据行,然后读取其颜色,然后填充网格行的属性。像这样:

protected void grdMyList_RowDataBound(object sender, GridViewEventsArgs e)
{
    DataRow row = (DataRow)e.Row.DataItem;
    e.Row.Cells[0].BackColor = System.Drawing.Color.FromName(row["Color"].ToString());
}
于 2014-04-10T16:17:17.413 回答
1

您正在遍历整个表格并为每一行设置颜色。我想你想要类似的东西

protected void grdMyList_RowDataBound(object sender, GridViewEventsArgs e)
{
    DataTable dtMyList = (DataTable)ViewState["MyList"];

    index i = e.Row.RowIndex;
    e.Row.Cells[0].BackColor = System.Drawing.Color.FromName(Convert.ToString(dtMyList.Rows[i]["Color"]));

}
于 2014-04-10T16:17:39.603 回答