Discussion:
Selection und Bedienbarkeit im DataGrid aufheben/sperren?
(zu alt für eine Antwort)
Klaus Urban
2004-02-02 09:33:22 UTC
Permalink
Hallo zusammen,

Ich hab einige Probleme mit gebundenen Windows Forms DataGrids.
Wer hat die nicht. :)

1. Ich möchte die CurrentRow des Binding Managers auf Nothing setzen,
sprich, im Grid soll keine Row selektiert sein, bis der User eine
auswählt. Hintergrund ist, daß ich das DataGrid zur Auswahl aus einer
mehrspaltigen Liste verwende, und auch "nichts auswählen" möglich sein
soll.

Kann man das überhaupt erreichen? Ich kann zwar im Grid alle Rows
UnSelecten, aber der Currency Manager liefert dennoch immer eine Current
Row...

2. Ich möchte ein Grid read-only darstellen, ohne daß der User Zeilen
und Zellen auswählen kann.

Mit myGrid.Enabled=False bin ich auf die Nase gefallen, da evtl.
vorhandene Scrollbars dann nicht mehr bedienbar sind.

Ich habe jetzt eine Hilfsspalte der Breite Null angelegt und setze im
CurrentCellChanged-Handler die Current Cell immer auf diese Hilfsspalte.
Sehr elegant kommt mir das nicht gerade vor...

3. Ich möchte verhindern, daß der User die Spaltenbreiten verändern
kann. Bisher hab ich keine Möglichkeit dafür entdeckt, außer die Header
abzuschalten...

TIA,
Klaus Urban
Jürgen Beck
2004-02-02 10:33:50 UTC
Permalink
Post by Klaus Urban
2. Ich möchte ein Grid read-only darstellen, ohne daß der User Zeilen
und Zellen auswählen kann.
Hallo Klaus,

wenn Du das DataGrid an eine DataView bindest, kannst Du das über deren
Eigenschaften AllowDelete, AllowEdit und AllowNew steuern.
Post by Klaus Urban
3. Ich möchte verhindern, daß der User die Spaltenbreiten verändern
kann. Bisher hab ich keine Möglichkeit dafür entdeckt, außer die Header
abzuschalten...
Jetzt wird es etwas aufwendiger. Hier musst Du das Datagrid erweitern und
die OnMouseDown-Methode überschreiben:

[C#]
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e) {
DataGrid.HitTestInfo hti = this.HitTest(new Point(e.X, e.Y));
if(hti.Type == DataGrid.HitTestType.ColumnResize) {
return; //no baseclass call
}
base.OnMouseDown(e);
}

[VB.NET]
Protected Overrides Sub OnMouseDown(ByVal e As
System.Windows.Forms.MouseEventArgs)
Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X,e.Y))
If hti.Type = DataGrid.HitTestType.ColumnResize Then
Return 'no baseclass call
End If
MyBase.OnMouseDown(e)
End Sub

Siehe dazu auch:
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q872q
"5.47 How can I prevent my user from sizing columns in my datagrid?"
--
Jürgen Beck
MCSD.NET, MCDBA, MCT
www.Juergen-Beck.de
Klaus Urban
2004-02-03 10:25:24 UTC
Permalink
Post by Jürgen Beck
Hallo Klaus,
wenn Du das DataGrid an eine DataView bindest, kannst Du das über deren
Eigenschaften AllowDelete, AllowEdit und AllowNew steuern.
Hallo Jürgen,

Leider gibt es keine Eigenschaft AllowSelectCell. Aber... s.u.
Post by Jürgen Beck
Post by Klaus Urban
3. Ich möchte verhindern, daß der User die Spaltenbreiten verändern
kann.
[...]
Post by Jürgen Beck
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q872q
"5.47 How can I prevent my user from sizing columns in my datagrid?"
Danke, funktioniert! :)

Nicht zu fassen... In der FAQ, auf die ich selber oft verweise, steht's
drin. Und eine Lösungsidee für AllowSelectCell ebenso:

"5.40 How can I make my grid never have an active edit cell and always
select whole rows (as in a browser-type grid)?"

Ich sollte erst FAQ lesen und dann posten. Besonders Montags... ;)

ciao,
Klaus Urban

Loading...