Probleme mit Schreibschutzt eines DataGridView-Feldes

22/10/2008 - 16:04 von Christoph Michalski | Report spam
Hallo,
es geht um ein DataGridView, das an eine DataView gebunden ist. Schon beim
Auslesen der Daten aus der Datenbank habe ich im Rahmen der SQL-Abfrage mache
Felder "fomatiert" z.B über Trim oder Left-Befehl:

SELECT TestFeld1, Trim(TestFel2), Left(TestFeld3,6) ... etc

Die so bearbeiteten Felder sind im Datagridview schreibgeschützt, d.h. ich
kann diese Felder, anders als die andern, nicht bearbeiteten Felder, im
DataGridView nicht editieren.
Weiß jemand einen Rat, wie ich diese Felder dennoch im DataGridView
bearbeiten kann???
Gruß
Christoph
 

Lesen sie die antworten

#1 Peter Götz
22/10/2008 - 19:17 | Warnen spam
Hallo Christoph,

es geht um ein DataGridView, das an eine DataView
gebunden ist. Schon beim Auslesen der Daten aus
der Datenbank habe ich im Rahmen der SQL-Abfrage
mache Felder "fomatiert" z.B über Trim oder Left-Befehl:

SELECT TestFeld1, Trim(TestFel2), Left(TestFeld3,6) ... etc
Die so bearbeiteten Felder sind im Datagridview
schreibgeschützt, d.h. ich kann diese Felder, anders
als die andern, nicht bearbeiteten Felder, im
DataGridView nicht editieren.



Nicht nur nicht im DataGridView.
Da es in der DB-Tabelle z.B. kein Feld "Trim(TestFel2)"
gibt kannst Du das natürlich auch nicht beschreiben.

Weiß jemand einen Rat, wie ich diese Felder dennoch
im DataGridView bearbeiten kann???



Hole Deine Daten mit

Select TestFeld1, TestFeld2, Testfeld From Tabelle

in die DataTable und die zugehörige DataView, dann
kannst Du alle Felder beschreiben.
Die Formatierung der Daten in den einzelnen Feldern
nimmst Du dann in der _CellFormatting-Ereignisprozedur
des DataGridView vor.

Im einfachsten Fall kann das z.B. so wie im nachfolgenden
Beispiel aussehen.

' /// Code in einer leeren Form
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateData()

DGV = New DataGridView
DGV.Dock = DockStyle.Fill
Me.Controls.Add(DGV)
DGV.DataSource = mDV
DGV.AutoResizeColumns()

End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("LText", GetType(String))
.Columns.Add("SText", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
DR.Item(2) = DR.Item(1)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
mDV = New DataView(mDT)
End Sub

Private Sub DGV_CellFormatting _
(ByVal sender As Object, _
ByVal e As DataGridViewCellFormattingEventArgs _
) Handles DGV.CellFormatting

If e.ColumnIndex = 2 Then
If e.Value IsNot Nothing Then
e.Value = e.Value.ToString.Substring(0, 3)
End If
End If
End Sub
End Class
' \\\ E N T E

Kopiere den Code in ein leeres Formmodul und starte
das Programm.
Die Spalten LText und SText enthalten in der DataTable
jeweils den gleichen Text, im DataGridView werden in der
Spalte SText aber nur die ersten drei Zeichen dieses
Textes angezeigt. Die Spalte SText ist dennoch editierbar.
Ein in dieser Spalte eingegebener Text wird auch gleich
wieder entsprechend auf eine Lànge von 3 Zeichen formatiert.
Die Formatierung geschieht in der Sub DGV_CellFormatting.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen