Wiążę listę do DataGridView. Jedną z właściwości klasy SomeObject będzie kod statusu (np. Czerwony, żółty, zielony). Czy mogę łatwo "związać" status z kolorem tła komórki? Co powiesz na wiązanie z podpowiedziami?Powiązanie z DataGridView - czy istnieje sposób "powiązania" koloru tła komórki?
Odpowiedz
Można napisać procedurę obsługi zdarzenia CellFormatting DataGridView w celu dostosowania koloru tła. Oto obrobionych przykład (musisz być przeciągnięty DataGridView na domyślnym formularzu następnie dwukrotnym kliknięciu na razie CellFormatting aby utworzyć uchwyt):
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private BindingSource _source = new BindingSource();
public Form1()
{
InitializeComponent();
_source.Add(new MyData(Status.Amber, "Item A"));
_source.Add(new MyData(Status.Red, "Item B"));
_source.Add(new MyData(Status.Green, "Item C"));
_source.Add(new MyData(Status.Green, "Item D"));
dataGridView1.DataSource = _source;
dataGridView1.Columns[0].Visible = false;
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1)
{
DataGridView dgv = sender as DataGridView;
MyData data = dgv.Rows[e.RowIndex].DataBoundItem as MyData;
switch (data.Status)
{
case Status.Green:
e.CellStyle.BackColor = Color.Green;
break;
case Status.Amber:
e.CellStyle.BackColor = Color.Orange;
break;
case Status.Red:
e.CellStyle.BackColor = Color.Red;
break;
}
}
}
}
public class MyData
{
public Status Status { get; set; }
public string Text { get; set; }
public MyData(Status status, string text)
{
Status = status;
Text = text;
}
}
public enum Status
{
Green,
Amber,
Red
}
}
Obiekty tu właśnie mają status i tekstu dla prostoty . Tworzę BindingSource dla przykładowego zestawu tych obiektów, a następnie używam go jako źródła danych dla DataGridView. Domyślnie siatka automatycznie generuje kolumny po związaniu, więc nie ma potrzeby robienia tego ręcznie. Ukrywam też pierwszą kolumnę, która jest związana z wartością Statusu, ponieważ zamiast tego będziemy kolorować komórki Tekstu.
Aby faktycznie wykonać obraz, odpowiadamy na zdarzenie CellFormatting. Dostajemy odwołanie do DataGridView przez odlewanie nadawcy, a następnie używamy właściwości RowIndex obiektu DataGridViewCellFormattingEventArgs, aby uzyskać sam element danych (każdy wiersz ma właściwość DataBoundItem, która nam to wygodnie daje). Ponieważ DataBoundItem jest typem obiektu, musimy go rzucić na nasz konkretny typ, wtedy możemy faktycznie dostać się do samej właściwości Statusu ... Uff!
Nie miałem żadnego doświadczenia z programowaniem narzędzi, ale pomyślałem, że powinieneś zareagować na zdarzenie MouseHover, a następnie pracować nad odkryciem, który wiersz jest wskazywany, aby zacząć.
Mam nadzieję, że to pomoże.
Dobra odpowiedź - dziękuję – xyz
+1, Świetna odpowiedź Znalazłem ostatni wiersz był pusty wiersz, więc musiał sprawdzić, czy MyData była zerowa.Od tego świetnie! – Russell
Działa to świetnie, tylko pytanie, czy istnieje sposób, aby zrobić ten wiersz na raz, zamiast komórki.Zainteresowanie, czy istnieje wydajność uderzył, gdy masz 1000+ wierszy, 10+ kolumn. – Sint
Po wyjęciu z pudełka dowolna kolumna DataGridViewColumn może być powiązana tylko z jedną właściwością obiektów w DataSource, nazwa właściwości jest nadawana przez właściwość DataPropertyName każdej kolumny DataGridViewColumn (będziesz mieć określone typy kolumn, takie jak: DataGridViewTextBoxColumn, ...).
Można użyć zdarzenia DataGridView.CellFormatting, aby zmienić styl komórki w zależności od elementu databound. W polu DataGridViewCellFormattingEventArgs tego zdarzenia pojawi się indeks wiersza, z którego można pobrać bieżący obiekt (źródło wiersza). Stamtąd możesz użyć dowolnej właściwości obiektu, aby wpłynąć na twoją komórkę.
Dobrym punktem wyjścia (podobny pomysł): here
Drugim pomysłem byłoby rozwijają swój własny rodzaj DataGridViewColumn i dodać właściwości do innych rzeczy potrzebnych do związania. Na przykład w ten sam sposób, w jaki ma wbudowaną nazwę DataPropertyName, możesz dodać własną: BackgroundColorPropertyName. Punkt wyjścia do budowania niestandardowych DataGridViewColumns można znaleźć here.
- 1. Dynamiczne zmienianie koloru komórki datagridview
- 2. warunkowa zmiana koloru tła i tekstu komórki datagridview
- 3. Ustawienie koloru tła komórki Fullcalendar
- 4. Powiązanie słownika z DataGridView w języku C#?
- 5. Zmiana koloru wiersza w DataGridView na podstawie ilości wartości komórki
- 6. Zapętlanie przez komórki DataGridView
- 7. Czy istnieje odpowiedni algorytm do wykrywania koloru tła figury?
- 8. Komórki DataGridView tylko do odczytu
- 9. Jak zmienić kolor tła komórki Excel z biblioteki python xlwt?
- 10. Wyrażenie pola SSRS w celu zmiany koloru tła komórki
- 11. Czy istnieje sposób na utworzenie tła tła za pomocą CSS?
- 12. Tekst komórki UITableViewLabel koloru
- 13. Czy istnieje sposób przekazywania kontekstu do powiązania w jQuery?
- 14. Czy istnieje sposób resetowania właściwości CSS ramki, promienia obramowania i tła koloru?
- 15. Czy istnieje sposób na rozszerzenie koloru tła elementów nieuporządkowanych na liście, aby znaleźć się za kulami?
- 16. Zmiana koloru tła przycisków ActionBar
- 17. Ustawianie koloru tła dla SKLabelNode?
- 18. matplotlib: czy możliwe jest zmienianie koloru tła?
- 19. Czy istnieje sposób na powiązanie mapowania wyników i rozpakowywania?
- 20. W Perlu, czy istnieje sposób na powiązanie ze skrytką?
- 21. Android AlertDialog tytuł koloru tła
- 22. Ustawianie koloru tła wiersza tabeli
- 23. Zmiana koloru kciuka i koloru tła JScrollPane?
- 24. Zmiana koloru tła ActionBarSherlock
- 25. Zmiana koloru tła UIButton
- 26. DataGridView & BindingList: Jak sprawdzić, czy wartość komórki się zmieniła?
- 27. Zmiana koloru tekstu na podstawie koloru tła
- 28. select2 zmiana koloru tła
- 29. Przejście koloru tła
- 30. Gnuplot - zmiana koloru tła
Naprawdę mam nadzieję, że dostaniesz odpowiedź na to, i że to jest możliwe, nie byłem w stanie tego rozgryźć, ustawiłem kolor tła po wiązaniu danych przez zmianę każdego stylu komórki. Niestety to jest naprawdę powolne :(datagridview1.Rows [1] .Cells [2] .Style.BackColor = Color.Red –