Entwickler-Ecke

WinForms - DataGridView Rectangle


tomycat - Sa 19.03.16 14:46
Titel: DataGridView Rectangle
hallo,
ich möchte gerne meine Tabelle ausdrucken, die ist erstellt mit datagridview1.
Mit listView1 habe ich es hinbekommen. Leider kennt datagridview keine Bounds. Was muss ich ändern?

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for (int x = 0; x < listView1.Items.Count; x++)
{
    #region
    Rectangle rt = new Rectangle();
    rt = listView1.Items[0].SubItems[3].Bounds; // übernimmt Rechteck der ersten Zeile, Spalte 0
    rt.X = 100;
    rt.Y = 100 + Höhe;
//    e.Graphics.FillRectangle(Brushes.DarkGray, rt); // füllt Hintergrund
    e.Graphics.DrawRectangle(p, rt);   //Zeichnet ein Rechteck
    e.Graphics.DrawString(listView1.Items[x].SubItems[0].Text.ToString(), listView1.Font, Brushes.Black, rt);
    #endregion
  
    // Es folgen viele anderen Regionen...
}


Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.


Th69 - Sa 19.03.16 15:10

Jede DataGridViewCell hat eine ContentBounds-Eigenschaft [https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewcell.contentbounds(v=vs.110).aspx], oder nach was suchst du?


tomycat - Sa 19.03.16 15:19

was muss ich an meinem Code ändern, dass ich drucken kann?


Ralf Jansen - Sa 19.03.16 15:38

Zitat:
was muss ich an meinem Code ändern, dass ich drucken kann?


Es ist ein anderes Control das anders funktioniert. Wie genau du was ändern mußt ist deine Sache (es ist kein simples "ersetze a duch b" Ding).

Ich würde zuerst einmal über die Columns [http://DataGridView.Columns] iterieren den beim ausdrucken willst du sicher die Spaltenüberschriften auch drucken. Nebenbei kannst du dir beim iterieren über die Columns die Spaltenbreiten [https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewcolumn.width(v=vs.110).aspx] merken. Die Spaltenbreite je Spalte ist ja immer gleich. Und danach dann über die Rows [https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridview.rows(v=vs.110).aspx] iterieren. Die Row Höhe [https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewrow.height(v=vs.110).aspx] kann je Row unterschiedlich sein also mußt du die je Row neu lesen.


tomycat - Sa 19.03.16 23:01

stimmt, man kann nicht einfach a gegen b tauschen, bin überrascht, das habe ich über goole gefunden.
http://csharp.net-informations.com/datagridview/csharp-datagridview-printing.htm