2017-08-07 1 views
-1

Je rencontre un problème lorsque j'essaie de créer des paramètres personnalisés pour un gridview. J'ai une base de données configurée comme suit: Utilisateur | Couleurs | TempID. Je souhaite pouvoir modifier les couleurs gridview en fonction du nom d'un utilisateur lorsqu'il apparaît dans la liste. J'ai donc ajouté l'utilisateur Marcus à la base de données avec une couleur de #fef100. Cependant quand j'essaye de tirer dans les arrangements je reçois le ceci: system.data.datarow au lieu du nom d'utilisateur marcus. Voici le codeParamètres personnalisés 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

Il devrait être 'tools13.Rows [0] [0] .ToString()' – hardkoded

Répondre

0

Vous êtes déjà en boucle toutes les lignes de tools13, vous vous pouvez simplement utiliser

e.Row.Cells[0].BackColor = System.Drawing.ColorTranslator.FromHtml(row["Colors"].ToString()); 

Cependant, comme il est probable qu'un utilisateur a une seule couleur renvoyée de la requête, vous peut accéder directement à la première rangée sans les boucles 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()); 
    } 
} 

Le tools13.Rows.Count > 0 est nécessaire pour vous assurer que vous ne recevez pas un index out of bounds lorsqu'un utilisateur n'a pas de couleurs = DataTable vide.

+0

Merci beaucoup! Je devenais vraiment frustré avec ça ne fonctionnait pas. Votre solution a fonctionné comme un charme. – Marcus