Marcin Pigłowski

Marcin Pigłowski Specjalista ds. baz
danych

Temat: Narysowanie ikony na nagłówku siatki

Witam wszystkich,

mam kłopot. Chcę narysować ikonę na nagłówku jednej kolumny DataGridView. Rysuję za pomocą kodu:


private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
try
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
{
Image img = (Image)this.resources.GetObject("ArrowUp16");

e.Graphics.DrawImage(img, new Point(e.CellBounds.Right - 2 * img.Width, e.CellBounds.Top));

e.Handled = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


i jest problem jak e.Handled = false to nie widać ikony, ewentualnie pojawia się w różnych ciekawych miejscach ale nie tam gdzie powinna :(
jak e.Handled = true to znika mi cały header i tylko widzę tą ikonę, a trochę mi się nie uśmiecha rysować całego nagłówka.

Może ktoś ma pomysł jak z tego wybrnąć, może kiedyś już się z tym spotkał.

Od razu mówię, że rysunek istnieje i żaden wyjątek nie jest rzucany. Cała formatka ma tylko DataGridView a w zdarzeniu Load formatki są ładowane dane (lista 20 elementów o strukturze: id, value1, value2).

I geneza powstania problemu:
Dane ładuje do siatki (w innym projekcie ten jest tylko, żeby pokazać sam problem bez wnikania w to czy coś innego może powodować taki problem) dane w VirtualMode. Ponieważ takich danych DataGridView nie może sortować więc sortuję ręcznie i podstawiam na nowo do siatki. Minus takiego rozwiązania jest taki, że nie wyświetla się strzałka na nagłówku w którym kierunku są posortowane dane. Może ktoś wie jak wymusić wyświetlenie takiej strzałki gridowej, wtedy pierwszy problem automatycznie się rozwiąże :)

konto usunięte

Temat: Narysowanie ikony na nagłówku siatki

`Piotr Sowa edytował(a) ten post dnia 12.02.12 o godzinie 15:05
Marcin Pigłowski

Marcin Pigłowski Specjalista ds. baz
danych

Temat: Narysowanie ikony na nagłówku siatki

Problem że dane są dodawane do girda za pomocą VirtualMode i jest to wymagane niestety. Za pomocą DataSource idzie bez problemu to wiem :)
Marcin Pigłowski

Marcin Pigłowski Specjalista ds. baz
danych

Temat: Narysowanie ikony na nagłówku siatki

Rozwiązanie:


if (e.RowIndex == -1 && e.ColumnIndex == 0)
{
Image img = (Image)this.resources.GetObject("ArrowUp16");

e.Paint(e.ClipBounds, DataGridViewPaintParts.All);
e.Graphics.DrawImage(img, new Point(e.CellBounds.Right - 2 * img.Width, e.CellBounds.Top));

e.Handled = true;
}


i ikonka jest tam gdzie ma być :)

Następna dyskusja:

Moskitiery, siatki przeciw ...




Wyślij zaproszenie do