2008-10-18 11 views
10

J'utilise un ListView en C# pour créer une grille. Je voudrais trouver un moyen de mettre en évidence une cellule spécifique, par programmation. J'ai seulement besoin de mettre en évidence une cellule.C# ListView Detail, Sélectionnez une seule cellule

J'ai expérimenté les sous-éléments de Owner Drawn, mais en utilisant le code ci-dessous, j'obtiens des cellules en surbrillance, mais pas de texte! Y a-t-il des idées sur la façon de le faire fonctionner? Merci de votre aide.

//m_PC.Location is the X,Y coordinates of the highlighted cell. 


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) 
{ 
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X)) 
     e.SubItem.BackColor = Color.Blue; 
    else 
     e.SubItem.BackColor = Color.White; 
    e.DrawBackground(); 
    e.DrawText(); 
} 
+0

Winforms ou web? – tvanfosson

Répondre

14

Vous pouvez le faire sans propriétaire-dessin la liste:

// create a new list item with a subitem that has white text on a blue background 
ListViewItem lvi = new ListViewItem("item text"); 
lvi.UseItemStyleForSubItems = false; 
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, 
    "subitem", Color.White, Color.Blue, lvi.Font)); 

Les arguments de couleur au constructeur ListViewSubItem contrôlent la couleur de premier plan et arrière-plan de la sous-élément. La chose critique à faire ici est de mettre UseItemStyleForSubItems à False sur l'élément de liste, sinon vos changements de couleur seront ignorés.

Je pense que votre solution owner-draw aurait aussi bien fonctionné, mais vous devez vous rappeler de changer la couleur du texte (premier plan) lorsque vous changez l'arrière-plan en bleu, sinon le texte sera difficile à voir.

1

Compris. Voici le code pour basculer la surbrillance d'un sous-élément spécifique.

listView1.Items[1].UseItemStyleForSubItems = false; 
if (listView1.Items[1].SubItems[10].BackColor == Color.DarkBlue) 
{ 
    listView1.Items[1].SubItems[10].BackColor = Color.White; 
    listView1.Items[1].SubItems[10].ForeColor = Color.Black; 
} 
else 
{ 
    listView1.Items[1].SubItems[10].BackColor = Color.DarkBlue; 
    listView1.Items[1].SubItems[10].ForeColor = Color.White; 
} 
1

Dans mon cas, je voulais mettre en évidence des lignes spécifiques, y compris tous les champs. Donc, chaque ligne de ma liste avec "Medicare" dans la première colonne obtient la ligne entière en surbrillance:

public void HighLightListViewRows(ListView xLst) 
     { 
      for (int i = 0; i < xLst.Items.Count; i++) 
      { 
       if (xLst.Items[i].SubItems[0].Text.ToString() == "Medicare") 
       { 
        for (int x = 0; x < xLst.Items[i].SubItems.Count; x++) 
        { 
         xLst.Items[i].SubItems[x].BackColor = Color.Yellow; 
        } 
       } 
      } 
     }