2010-08-25 11 views
12

Come posso modificare a livello di codice il colore di sfondo di una singola cella in un listview utilizzando il proprio valore?Come modificare il backcolor di un sotto-elenco listview utilizzando il proprio valore

alt text

I valori nella colonna ColorFlag venuto dal database.

Ecco il mio codice:

foreach(DataRow dr in _dataTbl.Rows) 
     { 
      _markOW = dr["Mark"].ToString(); 
      _stock = dr["Stock"].ToString(); 
      _SteelSectio = dr["SteelSection"].ToString(); 
      _colo = (Int32)dr["Color"]; 


      ListViewItem _lvi = new ListViewItem(_markOW); 
      _lvi.SubItems.AddRange(new string[]{_SteelSectio, _stock,  _colo.ToString()}); 

      _myListView.Items.Add(_lvi); } 

Ecco il codice che ho cercato di cambiare il colore di sfondo delle celle:

for (int _i = 0; _i < _owLV.Items.Count; _i++) 
      { 
       _myListView.Items[_i].UseItemStyleForSubItems = false; 
       _myListView.Items[_i].SubItems[3].BackColor = Color.FromArgb(_colo); 
      } 

Grazie in anticipo

+0

Perché non stai utilizzando un DataGridView? – siride

+0

Non so ancora come usare DataGridView. – Rye

+0

Bene, questo potrebbe essere un buon momento per imparare. In realtà non è così difficile e gli strumenti di progettazione visuale per l'impostazione di una griglia semplice sono abbastanza semplici. Penso che il tuo tempo sarebbe meglio speso imparando che combattere con ListView per farlo fare ciò che non è realmente progettato per fare. – siride

risposta

29

Per quanto posso dire, il codice che avete sembra a posto. Ho appena lanciato una rapida applicazione Windows Form e ho lanciato una ListView sul modulo con due colonne nella vista di dettaglio. Il seguente codice funziona correttamente.

var item1 = new ListViewItem("Item 1"); 
item1.SubItems.Add("Color"); 
item1.SubItems[1].BackColor = Color.FromArgb(-16711936); 
item1.UseItemStyleForSubItems = false; 

listView1.Items.Add(item1); 

Vorrei provare a impostare il BackColor prima di aggiungere l'elemento. Sembra anche che tu abbia impostato tutti gli elementi sullo stesso colore che probabilmente non è quello che desideri.

+0

Sì, questo è il mio problema. – Rye

+0

Capito! Grazie. – Rye

+0

Wow, Sto lavorando bene .. grazie. –

5

Date un'occhiata a questi collegamenti:

C# ListView Detail, Highlight a single cell

Changing color of list view cell using C# (ha una soluzione di lavoro)

Il punto chiave è quello di impostare questo:

listView1.Items[0].UseItemStyleForSubItems = false; 

Fate questo:

foreach (DataRow dr in _dataTbl.Rows) 
{ 
    _markOW = dr["Mark"].ToString(); 
    _stock = dr["Stock"].ToString(); 
    _SteelSectio = dr["SteelSection"].ToString(); 
    _color = (Int32)dr["Color"]; 

    ListViewItem _lvi = new ListViewItem(_markOW); 

    _lvi.SubItems.AddRange(new string[] {_SteelSectio, _stock, _color.ToString() });  
    _lvi.UseItemStyleForSubItems = false; 
    _lvi.SubItems[2].BackColor = Color.FromArgb(_color); 

    _myListView.Items.Add(_lvi); 
} 
+0

Il secondo link che hai postato è quello che uso poco fa. Ma il problema è che l'ultimo valore impostato nella variabile _colo sarà il colore posteriore della colonna. – Rye

+1

@Rye è perché li stai impostando tutti allo stesso colore, _colo. Dai un'occhiata al mio esempio e alla mia nota alla fine. È necessario impostare il BackColor prima di aggiungere l'elemento. – Josh

+0

Capito. Grazie. – Rye

Problemi correlati