ASP.NET Webform自定义设置
问题描述:
我在尝试创建gridview
的自定义设置时遇到问题。我有一个数据库设置如下:用户|颜色| TempID。我希望能够根据列表中显示的用户名称更改颜色gridview
。所以我将用户Marcus添加到数据库中,颜色为#fef100
。但是,当我尝试拉入设置时,我得到了这个:system.data.datarow,而不是用户名marcus。下面是代码ASP.NET Webform自定义设置
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
string Settings = ConfigurationManager.ConnectionStrings["userthemes"].ConnectionString;
SqlConnection con13 = new SqlConnection(Settings);
SqlDataAdapter grid13 = new SqlDataAdapter("SELECT [User],[Colors], [TempID] FROM userthemes.dbo.[Colors]", con13);
DataTable tools13 = new DataTable();
grid13.Fill(tools13);
DataTable alltools13 = new DataTable();
GridView10.DataSource = tools13;
GridView10.DataBind();
Label9.Text = tools13.Rows[0].ToString();
foreach (DataRow row in tools13.Rows)
{
foreach (var item in row.ItemArray)
{
if (e.Row.Cells[1].Text == (tools13.Rows[0].ToString()))
{
e.Row.Cells[0].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[1].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[2].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[3].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[4].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[5].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[6].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[7].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[8].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[9].BackColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[8].ForeColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
e.Row.Cells[9].ForeColor = System.Drawing.ColorTranslator.FromHtml(tools13.Rows[1].ToString());
}
}
}
}
答
您已经循环中tools13
所有行,你可以只使用
e.Row.Cells[0].BackColor = System.Drawing.ColorTranslator.FromHtml(row["Colors"].ToString());
然而,因为它很可能用户只具有单一颜色从查询返回的,你可以直接访问第一行而不需要foreach
循环。
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (tools13.Rows.Count > 0)
{
e.Row.BackColor = ColorTranslator.FromHtml(tools13.Rows[0]["Colors"].ToString());
//or by column index instead of by name
e.Row.BackColor = ColorTranslator.FromHtml(tools13.Rows[0][1].ToString());
}
}
的tools13.Rows.Count > 0
需要确保当用户没有颜色=空的DataTable你没有得到一个index out of bounds
。
+0
非常感谢!无法工作,我感到非常沮丧。你的解决方案就像一个魅力。 – Marcus
它应该是'tools13.Rows [0] [0] .ToString()' – hardkoded