Rahmen einer Zelle einfärben VB.NET

Hier werden Fragen zur Programmierung des ppsGrids...
Post Reply
BeS
Posts: 7
Joined: 28.09.2012, 17:44
Spamschutz: 8

Rahmen einer Zelle einfärben VB.NET

Post by BeS »

Hallo Torsten

Möchte gleich eine weitere Frage stellen.

Ist es möglich, vom Zellenrahmen nur die linke Linie z.B. Rot einzufärben?
Meine Versuche mit CellBorderSide ergaben, dass, wenn die linke Linie in Rot angezeigt wird,
die anderen Linien der Zelle nicht gezeichnet werden.

Gibt es eine Möglichkeit, den Zellenrahmen zu lassen wie er ist, und nur die Linke Linie rot einzufärben?
Ich bräuchte das, um in meinen großen Tabellen einzelne Bereiche (Spalten) optisch voneinander zu trennen.
Kann man dies eventuell auch auf andere Weise lösen?
In der C#-Hilfe ist das Verbindungszeichen PIPE '|' vorhanden. Da meckert VB.Net. Gibt es hier etwas entsprechendes für VB ?
Anbei mein Codeausschnitt der funktioniert.
Linke Linie =rot, alle anderen Linien der Zelle werden jedoch nicht gezeichnet.

'CellBorderSide
'Dim cell As ppsGrid.GridCell

cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Left '| ppsGrid.eCellBorderSide.Right
cell.CellFrameColor = Color.Red

Gruß Bertram

torsten
Site Admin
Posts: 92
Joined: 02.05.2006, 09:04
Spamschutz: 10
Location: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Post by torsten »

Hallo Bertram
In der C#-Hilfe ist das Verbindungszeichen PIPE '|' vorhanden.
Da meckert VB.Net. Gibt es hier etwas entsprechendes für VB ?
Das "|" ist hier keine "Pipe" sondern der bninäre (bitweiser) Oder-Operator in C#.
In VB.net ist es das "OR" (soweit ich weiß, gibt es bei VB.net keine
Unterscheidung zwischen bitweises und logischem "Oder")

Code: Select all

cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Left OR ppsGrid.eCellBorderSide.Right
cell.CellFrameColor = Color.Red
Gibt es eine Möglichkeit, den Zellenrahmen zu lassen wie er ist, und nur die Linke Linie rot einzufärben?
Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:

Code: Select all

row = Grid1.Rows(5)
row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom
row.CellFrameColor = Color.Red

col = Grid1.Cols(3)
row.CellBorderSide = ppsGrid.eCellBorderSide.Right
row.CellFrameColor = Color.Red

cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Right OR ppsGrid.eCellBorderSide.Bottom
cell.CellFrameColor = Color.Red
Das Beispiel zeichnet eine Linie:
- in der gesamten Spalte 3 rechts
- in der gesamten Zeile 5 unten
- in der Zelle (3,5) rechts und unten

Farblich mischen oder andere Muster innerhalb einer Zelle geht aber nicht.
Gruß Torsten

BeS
Posts: 7
Joined: 28.09.2012, 17:44
Spamschutz: 8

Re: Rahmen einer Zelle einfärben VB.NET

Post by BeS »

Hallo Torsten

Erstmal Danke für die schnelle Anwort

torsten wrote:Das "|" ist hier keine "Pipe" sondern der bninäre (bitweiser) Oder-Operator in C#.
In VB.net ist es das "OR" (soweit ich weiß, gibt es bei VB.net keine
Unterscheidung zwischen bitweises und logischem "Oder")
Das 'OR' funktioniert.

> Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.
> Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:

Habe das Ganze in einem neuen Projekt mit einem neuen Grid getestet
um Fehleinstellungen auszuschließen. Der Zellrahmen lässt sich wie du gesagt hast einstellen.
Aber einen 'Zeilen_Bottom' geht nicht.

Dim row As ppsGrid.GridRow
Dim col As ppsGrid.GridCol
Dim cell As ppsGrid.GridCell

' // Zeile einfärben
"row = Grid1.Rows(5)
"row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom
"row.CellFrameColor = Color.Red

--> row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom gibt eine Fehlermeldung:
'CellBorderSide' ist kein Member von ppsGrid.GridRow

Wenn man diese Zeile weglässt, wird in der Zeile der Cell-Rahmen
left, Bottom, right gezeichnet.

Vielleicht hast du noch eine Idee?
Gruß Bertram

torsten
Site Admin
Posts: 92
Joined: 02.05.2006, 09:04
Spamschutz: 10
Location: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Post by torsten »

Hallo Bertram
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen
Mhhh, also alles ziemlicher Quatsch, was ich da oben geschrieben habe... :-(
Eine Eigenschaft "CellBorderSide" für die Klasse GridRow gibs gar nicht.
(Nicht nur) deshalb kannst du nicht zwei (oder mehrere) CellBorderSide's in einer Zelle mischen.

Mehrere Ränder in unterschiedlichen Farben, Stärken und Stilen würden wohl nur mittels
Auflistung (Collection) von "CellBorderList" oä. funktionieren:

Code: Select all

  cell.CellBorder.Add(new GridCellBorder(left, 4, red, solid))         // links: rot
  cell.CellBorder.Add(new GridCellBorder(bottom, 1, blue, dash))       // unten: blau
  cell.CellBorder.Add(new GridCellBorder(right, 2, yellow, dot))       // rechts: gelb
So in etwa ließen sich beliebig viele Rahmen in unterschiedlichen Ausprägungen
in einer Zelle kombinieren. Frage dabei ist nur: Wie verhalten sich die "alten" Eigenschaften:
  • cell.CellBorderSide
  • grid/col/row/cell.CellFrameColor
  • grid/col/row/cell.CellFrameDashStyle
  • grid.CellFrameType
  • grid.CellFrameWidth
Theoretisch könnte ich alle Eigenschaften rausschmeissen. Nur ist das Grid
danach nicht mehr kompatibel zum Vorgänger: Nicht schön...
Tipps? Vorschläge?
Gruß Torsten

BeS
Posts: 7
Joined: 28.09.2012, 17:44
Spamschutz: 8

Re: Rahmen einer Zelle einfärben VB.NET

Post by BeS »

Hallo Torsten

cell.CellBorder.Add(new GridCellBorder(left, 4, red, solid)) // links: rot
cell.CellBorder.Add(new GridCellBorder(bottom, 1, blue, dash)) // unten: blau
cell.CellBorder.Add(new GridCellBorder(right, 2, yellow, dot)) // rechts: gelb

Das wäre schon super, wenn man das umsetzen könnte. Da fallen mir viele neue Möglichkeiten ein.
z.B. Zelle unterstreichen. Linien, vertikal und horizontal durchs Grid, verschieden stark und gefärbt.
Damit könnte man sich, neben dem Grid auch z.b. Formulare erstellen usw.
...
Könnte man die neue Funktion nicht parallel zur alten Eigenschaft anbieten, die sich aber gegenseitig ausschließen?
Also man kann entweder die alte oder die neue Funktion innerhalb eines Grids verwenden.
Damit bliebe die Kompatibilität zu alten Projekten erhalten.

Gruß Bertram

torsten
Site Admin
Posts: 92
Joined: 02.05.2006, 09:04
Spamschutz: 10
Location: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Post by torsten »

Hallo Bertram
Ich hab' heute mal ein bißchen "experimentiert" :-)

Code: Select all

	// array mit 4 GridCellBorder-Objekte
	GridCellBorder[]	brd_lst = new GridCellBorder[4];
	brd_lst[0]=new GridCellBorder(eCellBorderSide.Bottom,Color.Red,2,eDashStyle.DashDotDot);
	brd_lst[1]=new GridCellBorder(eCellBorderSide.Right,Color.Blue,4,eDashStyle.Dash);
	brd_lst[2]=new GridCellBorder(eCellBorderSide.Top,Color.Silver,6,eDashStyle.Solid);
	brd_lst[3]=new GridCellBorder(eCellBorderSide.Left,Color.Yellow,8,eDashStyle.Dot);
	// die vier BorderObjekte an die Zelle übergeben
	grid1[1,1].CellBorderList.AddRange(brd_lst);

	// geht auch: Zeilen bekommt Rahmen
	grid1.Rows[3].CellBorderList.AddRange(brd_lst);

	// geht auch: Alle vier Rahmen der Zelle gleich
	GridCellBorder brd = new GridCellBorder(eCellBorderSide.All,Color.Yellow,8,eDashStyle.Solid);
	grid1[3,1].CellBorderList.Add(brd);

	// Links/Rechts-Rahmen für Zelle
	brd_lst = new GridCellBorder[2];
	brd_lst[0]=new GridCellBorder(eCellBorderSide.Right,Color.Blue,4,eDashStyle.Solid);
	brd_lst[1]=new GridCellBorder(eCellBorderSide.Left,Color.Red,4,eDashStyle.Solid);
	grid1[5,1].CellBorderList.AddRange(brd_lst);

	// Links/Rechts-Rahmen für Spalte
	grid1.Cols[7].CellBorderList.AddRange(brd_lst);
Das ganze sieht dann ungefähr so aus:
Image

Ich würde sagen, du probiert es einfach mal aus...
Fehler/Infos/Rückmeldungen usw. bitte hierher :-)
Download wie immer unter http://www.ppsGrid.de/download/ppsGrid_beta.dll
Gruß Torsten

BeS
Posts: 7
Joined: 28.09.2012, 17:44
Spamschutz: 8

Re: Rahmen einer Zelle einfärben VB.NET

Post by BeS »

Hallo Torsten
Funktioniert alles. Perfekte Arbeit :D


Übersetzung in VB.NET
' // array mit 4 GridCellBorder-Objekte
Dim brd_lst(3) As ppsGrid.GridCellBorder

Grid1.AddCols(10)
Grid1.AddRows(10)

'GridCellBorder() brd_lst = new GridCellBorder(4);
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Red, 2, ppsGrid.eDashStyle.DashDotDot)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Dash)
brd_lst(2) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Top, Color.Black, 2, ppsGrid.eDashStyle.Solid)
brd_lst(3) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Yellow, 8, ppsGrid.eDashStyle.Dot)
'// die vier BorderObjekte an die Zelle übergeben
Grid1(1, 1).CellBorderList.AddRange(brd_lst)
'oder
Grid1.Cells(6, 6).CellBorderList.AddRange(brd_lst)

'Zelle unterstreichen
Grid1.Cells(0, 0).CellBorderList.Add(brd_lst(0)) '(AddRange(brd_lst))

'// geht auch: Zeile bekommt Rahmen
Grid1.Rows(3).CellBorderList.AddRange(brd_lst)
'Zeile bekommt Linie
Grid1.Rows(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Black, 2, ppsGrid.eDashStyle.Solid))
'Spalte bekommt Linie
Grid1.Cols(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Black, 2, ppsGrid.eDashStyle.Solid))

'// geht auch: Alle vier Rahmen der Zelle gleich
Grid1(3, 1).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.All, Color.Yellow, 8, ppsGrid.eDashStyle.Solid))

'// Links/Rechts-Rahmen für Zelle
brd_lst(2) = New ppsGrid.GridCellBorder
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Solid)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Red, 4, ppsGrid.eDashStyle.Solid)
Grid1(5, 1).CellBorderList.AddRange(brd_lst)

'// Links/Rechts-Rahmen für Spalte
Grid1.Cols(7).CellBorderList.AddRange(brd_lst)

Danke und Gruß
Bertram

Post Reply