2017-08-07 113 views
-1

我在尝试创建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()); 
      } 
     } 
    } 
} 
+0

它应该是'tools13.Rows [0] [0] .ToString()' – hardkoded

回答

0

您已经循环中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