vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 05.07.14 13:36

Hallo,
möchten meinen Text in den Zellen eines DataGridViews aufhübschen.
Dazu habe ich in den Text der Zellen mittels SQL Zeilenumbrüche eingebaut.
Das klappt auch wunderbar und die Zellen nehmen immer die ideale Höhe an.

Nun würde ich gerne Tabaulatoren in den Text aufnehmen.
Leider klappt dies nicht wie gewünscht.

Geht das überhaupt?
Und wenn, wie muss ich das machen?

Gruss
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 06.07.14 12:34

Hallo,
möchte mein Problem näher geschreiben.
Vielleicht kann man dann besser auf meine Fragen eingehen.

Habe mehere Angaben in einem Feld. Durch den Zeilenumbruch und mittels Einstellungen an der Zelle im DataGridView werden die Angabe schon deutlich besser dargestellt.

So sehen die Daten im Moment aus:

GK1: 132,00 € / Stk.
P456: 1,56 € / Meter
T3: 2,45 € / Stk.
Z76Z43-6: 1532,11 € / Stk.

Mein Wunsch:

GK1:..............132,00 € / Stk.
P456:................1,56 € / Meter
T3:....................2,45 € / Stk.
Z76Z43-6:...1532,11 € / Stk.

Die Kennungen sind unterschiedlich lang.
Mir kam die Idee, mit einem Tab Ordnung in das Gebilde zu bringen.
Es wäre auch schon hilfreich, wenn es wie folgt aussehen würde.

GK1:............132,00 € / Stk.
P456:...........1,56 € / Meter
T3:...............2,45 € / Stk.
Z76Z43-6:....1532,11 € / Stk.

An einen anderen Font (Zeichen mit gleicher Breite) und Formatierung hatte ich auch schon gedacht.
Aber das sieht auch sehr bescheiden aus.

Würde mich über Ideen riesig freuen.

Gruß
spatzimatzi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: sv00010
Datum: 06.07.14 13:22

Ich hatte so ein Problem auch mal. Die Lösung war aber ziemlich stümperhaft und kompliziert.
Daher wäre es mir echt lieber jemand anderes würde hier noch eine Antwort geben.
Meine Lösung war, dass ich eine neue Klasse erstellt habe, in welcher ich den Text welchen ich anzeigen wollte, reingemalt und dann vermessen habe.
Dann habe ich ausgerechnet, wieviele "." noch reinpassen und diese dann eingefügt.
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 06.07.14 13:43

Hallo SV00010,
vielen Dank für Deinen Beitrag.

die Aufbereitung der Daten erfolgt ausschließlich im Server mit SQL.
Die Punkte (.) habe ich in meinem Beitrag nur als Tabersatz genommen, damit die Preise ausgerichtet sind.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: Kuno60
Datum: 06.07.14 14:07

Ob es auch mit Tabulator funktionieren könnte, weis ich nicht. Das Tab-Zeichen bekommst du mit vbTab, Chr(9) oder ControlChars.Tab .
Wie ihr schon erwähnt habt, kann man einen Font fester Breite verwenden oder man zeichnet direkt in die Zelle.
Das DGV bietet hierfür das CellPainting-Ereignis. Über die e-Variable erhälst du alle erforderlichen Werte. Dazu musst du den Text in 2 Teile aufteilen (links und rechts) und beide Teile in die Zelle zeichnen. Mit Hilfe der StringFormat-Klasse lässt sich der Text dann Linksbündig und Rechtsbündig ausrichten.

Beitrag wurde zuletzt am 06.07.14 um 14:11:42 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 06.07.14 17:07

Hallo Kuno60,
vielen Dank für die Informationen.

Habe das Tab-Zeichen mit char(9) in mein SQL-Script eingebunden.
Leider ergibt sich keine Änderungen. Habe es auch mit mehreren Tab-Zeichen probiert.

Die Geschichte mit dem Zeichnen ist mir zu kompliziert.
Ich gehöre weiterhin in die Klasse der Programmieranfänger.

Bleibt mir im Moment wohl nur die Fonts mit fester Breite. Sieht dann aber nicht mehr schön aus.

Aber vielleicht hat ja noch jemand eine tolle Idee. Ich würde mich freuen!

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: Yammi900
Datum: 07.07.14 07:46

Hhm,

ketzerische Frage: Warum muss das alles in einer Spalte im Datagridview stehen? Normalerweise sind das 4 Spalten (Artikel, Menge, Währung und Einheit), die Du passend formatieren kannst und gut ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: ErfinderDesRades
Datum: 07.07.14 09:51

zustimm.
Hier werden offensichtlich mehrere Werte in eine Zelle gestopft - sowas ist ein Datenmodellierungs-Fehler.
Zumal die Daten unterschiedlichen Typs sind: Text, Fließkommazahl, Enumeration.

Mit Enumeration meine ich, dasses eine übergeordnete Tabelle "Masseinheit" geben sollte, mit Angaben wie "Stück" oder "Meter".

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 07.07.14 10:21

Hallo Yammi900, hallo ErfinderDesRades,
natürlich stellt sich die Frage, warum die Angaben nicht jeweils in einer eigenen Spalte ausgegeben werden.
Habe mir auch die Frage gestellt!

Erläuterung:
In dem DataGridView werden Artikel mit den wichtigsten informationen hinterlegt.
Bei diesen Artikel handelt es sich jedoch in der Regel um Artikel mit unterschiedlichen Güteklassen.
Artikel mit Güteklassen sind z.B. Fliesen.
Hier hat man die Güteklassen 1, 2, 3, ... (1., 2., 3., ... Wahl)
Jede Güteklasse hat jedoch einen eigenständigen Preis. Es ist aber immer der selbe Artikel.
Die Anzahl der Güteklassen ist jedoch nicht festgelgt. Auch die Schreibweisen der Güteklassen ist variabel.
Und zu guter letzt gibt es auch noch unterschiedlichen Mengeneinheiten. Denn Fliesen können in m², Karton oder auch Palette verkauft werden.
Würde ich all die Informationen horizontal ausrichten, so wäre nicht nur der Bildschirm zu schmal, sondern auch vom Handling nicht machbar.
Und darum ist es wichtig, die daten in ein Feld zu schreiben!!

Man muss häufig einen Kompromiss zwischen Logik und Handhabung finden.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: ErfinderDesRades
Datum: 07.07.14 10:28

mir scheint, das liesse sich alles ordentlich modellieren.
Angefangen mit einer Tabelle "Güteklasse"...

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 07.07.14 11:17

Hallo ErfinderdesRades,
es gibt eine Tabelle "Güteklasse"
Das eigentliche Problem ist nur die Darstellung der Daten in einem DataGridView.
Der Zeilenumbruch gelingt auch wunderbar in der Zelle.
Würde es mit dem Tabulator so einfach wie mit dem Zeilenumbruch gehen, dann hätte
ich eine super Darstellung. Logisch richtig und von der Handhabung topp.
Zumal man davon ausgehen muss, das die wenigsten Artikel mehrere Preise haben.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: DotNetErbse
Datum: 07.07.14 11:38

Hi,

Du könntest Deine Daten in eine RTF-Control-Instanz schreiben und dann das Control in die Zelle bringen:

http://stackoverflow.com/questions/225972/how-do-i-host-a-control-in-a-datagridviewcell-for-displaying-as-well-as-editing

Mit freundlichen Gr??en
DotNetErbse


[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)]

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: ErfinderDesRades
Datum: 07.07.14 11:38

Mittels OwnerDrawing, unter Einbezug eines StringFormats mit gesetzten Tabstops ist möglich, da was zu reissen.
Wobei ich den Eindruck habe, was dir vorschwebt sind keine wirklichen Tabstops, sondern teilweise Rechtsbündigkeit innerhalb einer Zeile.

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: spatzimatzi
Datum: 07.07.14 12:48

Hallo ErfinderDesRades,
die grundsätzliche Idee ist das Formatieren des Inhaltes.
Pro Güte, Preis und Mengeneinheit soll innerhalb der Zelle eine Zeile entstehen.
Und das kann ich mit einem Zeilenumbruch wunderbar darstellen.
Meine weiteren Gedanken gingen dann in Richtung Tabulator, weil ich dachte, das würde so einfach gehen wie mit dem Zeilenumbruch. Falsch gedacht.
Dann kam mir die Idee mit dem Font. Würde sicherlich einige Verbesserungen bringen, sieht aber bescheiden aus.
Und es wurde auch schon davon gesprochen, den Text selber zu zeichnen. Fällt weg, da Anfänger.
Könnte man die Anwender erziehen, wäre eine Standardisierung der Güteklassen möglich. Dadurch wäre der Inhalt der Zelle nicht so unruhig.
Und wenn möglich sollte es eine Lösung sein, die ich auf dem Server durchführen kann, da alle Datenaufbereitungen über StoredProcedure abgewickelt werden. Ein Einstreuen von CHAR(9) für Tab wäre da natürlich eine feine Sache gewesen.

Und wie Du schon sagtes:
Es muss kein Tab sein. Ich möchte bestimmte Teiles der Info links und rechtsbündig ausrichten!!

Aber wie???

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: ErfinderDesRades
Datum: 07.07.14 12:54

also wenn selber zeichnen ausscheidet weiß ich nix.

(Rechtschreibfehler urheberrechtlich geschützt)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabulator in Zellen eines DataGridView 
Autor: Kuno60
Datum: 07.07.14 13:11

Natürlich ist es besser, wenn alle Daten in getrennten Spalten stehen. Es muss auch nicht alles in einem DataGridView stehen. Beim Anwählen einer Zeile, können Detail-Daten in weiteren DGV's oder Einzelsteuerelementen angezeigt werden. Es gibt viele Möglichkeiten für Detailansichten. Auch kann man den Zellen ein Kontextmenü zuweisen.

Falls die Werte im DGV nur angezeigt werden sollen, also nicht Bearbeitet werden sollen, so ist auch eine grafische Lösung möglich. Dabei musst du selbst die Breite und Höhe einer Zelle einstellen.
Hier ein Beispiel (ohne Zeilenumbruch):
Die Daten werden hier am Doppelpunkt getrennt in Links und Rechts.
  Private Sub DataGridView_CellPainting(sender As Object, e As _
    DataGridViewCellPaintingEventArgs) Handles BenutzerDataGridView.CellPainting
    Dim dgv = DirectCast(sender, DataGridView)
    Try
 
      'todo: Hier den Namen der Spalte anpassen!
      If dgv.Columns("DataGridViewTextBoxColumn1").Index = e.ColumnIndex _
        AndAlso e.RowIndex >= 0 Then
 
        'Hintergrund und Gitter zeichnen
        e.PaintBackground(e.CellBounds, True)
 
        'Text zeichnen
        If (e.Value IsNot Nothing) Then
 
          'todo: Hier eventuell Rendermodus anpassen!
          e.Graphics.TextRenderingHint = _
            Drawing.Text.TextRenderingHint.ClearTypeGridFit
 
          Dim vs = CStr(e.Value).Split(":"c) 'Text teilen am Doppelpunkt
          If vs.Length = 2 Then 'Text links und rechts zeichnen
            Using sf As New StringFormat With {.LineAlignment = _
              StringAlignment.Center}
              Using sbr As New SolidBrush(e.CellStyle.ForeColor)
                If (e.State And DataGridViewElementStates.Selected) > 0 Then
                  sbr.Color = e.CellStyle.SelectionForeColor
                End If
                sf.Alignment = StringAlignment.Near 'links
                e.Graphics.DrawString(vs(0).Trim & ":", e.CellStyle.Font, sbr, _
                  e.CellBounds, sf)
                sf.Alignment = StringAlignment.Far 'rechts
                e.Graphics.DrawString(vs(1).Trim, e.CellStyle.Font, sbr, _
                  e.CellBounds, sf)
              End Using
            End Using
          Else 'Normal zeichnen
            e.PaintContent(e.CellBounds)
          End If
        End If
 
        e.Handled = True
      End If
    Catch ex As Exception
    End Try
  End Sub
Und so würde es dann etwa in der Zelle aussehen:
|Z76Z43-6:    1532,11 € / Stk.|
|P456:          1,56 € / Meter|
|Z76Z43-6:    1532,11 € / Stk.|
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel