Discussion:
Datagrid In Spalte nur int32 eingeben zulassen
(zu alt für eine Antwort)
Bruno Uato
2005-10-14 22:40:52 UTC
Permalink
Hallo,

ich habe ein Dataset mit 2 Spalten und ein Datagrid. Wie stelle ich es
an, das in das Datagrid z.B. in die erste Spalte nur int32-Werte
eingegeben werden können?

Vielen Dank im voraus, Bruno
Peter Fleischer
2005-10-15 06:36:49 UTC
Permalink
Post by Bruno Uato
Hallo,
ich habe ein Dataset mit 2 Spalten und ein Datagrid. Wie stelle ich es
an, das in das Datagrid z.B. in die erste Spalte nur int32-Werte
eingegeben werden können?
Bruno,
bau dir einen Spaltenstil, der die Tastenanschläge analysiert. Dazu kannst
du die Ereignisse der GridTextBox nutzen. Das funktioniert analog einer
normalen TextBox.

Peter
Bruno Uato
2005-10-15 09:44:14 UTC
Permalink
On Sat, 15 Oct 2005 08:36:49 +0200, "Peter Fleischer"
Post by Peter Fleischer
Post by Bruno Uato
Hallo,
ich habe ein Dataset mit 2 Spalten und ein Datagrid. Wie stelle ich es
an, das in das Datagrid z.B. in die erste Spalte nur int32-Werte
eingegeben werden können?
Bruno,
bau dir einen Spaltenstil, der die Tastenanschläge analysiert. Dazu kannst
du die Ereignisse der GridTextBox nutzen. Das funktioniert analog einer
normalen TextBox.
Peter
Dank dir für den Vorschlag,

leider bin ich mit Datagrid, Dataset etc. noch nicht so vertraut. Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt. Die
Beispiele aus MSDN etc. funktionieren bei mir nicht. Das Projekt wird
compiled, steigt aber beim debuggen ohne Fehlermeldung aus. Ein Try
catch brachte ans Licht, das der Datatype nicht valid ist. Das bringt
mich schon sehr ins Rätseln? Bleibt wohl nur dein Tip übrig.

Mfg, Bruno
Peter Fleischer
2005-10-15 11:49:21 UTC
Permalink
Bruno Uato wrote:
...
Post by Bruno Uato
leider bin ich mit Datagrid, Dataset etc. noch nicht so vertraut.
Bruno,
ein DataGrid ist ein Rahmen mit einer Liste von Tabellenstilen mit einem
Stil für jede darzustellende Tabelle. Jeder Tabellenstil hat eine Liste von
Spaltenstilen mit einem Stil für jede darzustellende Spalte. Der vom
Framework bereitgestellte Spaltenstil für Texte nutzt intern eine Textbox,
um in der aktiven Zelle zu editieren.
Post by Bruno Uato
Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt.
Ein Type einer Spalte ist der ADO.NET-Typ des Inhaltes, z.B. String, Int32,
Date usw.
Post by Bruno Uato
Die
Beispiele aus MSDN etc. funktionieren bei mir nicht.
Da es meisten Auszüge sind, musst du ggf. noch etwas herum bereitstellen.
Die wenigsten Beispiel haben Fehler, und dann meist nur wegen automatsicher
Übersetzung aus C# oder umgekehrt. Da lohnt sich ein Blick auf das gleiche
Beispiel in der anderen Sprache.
Post by Bruno Uato
Das Projekt wird
compiled, steigt aber beim debuggen ohne Fehlermeldung aus. Ein Try
catch brachte ans Licht, das der Datatype nicht valid ist. Das bringt
mich schon sehr ins Rätseln?
Ja mich auch, da mir ein paar Infos fehlen. Welchem ADO.NET-Typ verwaltet
denn das DataColumn-Objekt? Welche Daten bietes du ihm an? Wie konvertierst
du?
Post by Bruno Uato
Bleibt wohl nur dein Tip übrig.
Bestimmt nicht, da es viele Möglichkeiten gibt.

Peter
Bruno Uato
2005-10-16 19:23:03 UTC
Permalink
On Sat, 15 Oct 2005 13:49:21 +0200, "Peter Fleischer"
Post by Peter Fleischer
Post by Bruno Uato
Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt.
Ein Type einer Spalte ist der ADO.NET-Typ des Inhaltes, z.B. String, Int32,
Date usw.
Der Code sieht eignetlich ganz einfach aus:

Private Sub CreateRabattstaffeln()
'Die ganzen Zuordungen für Dataset und Datagrid etc.
Try

'System.Data.DataColumn
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
.ColumnName = "MengeAb"
.ReadOnly = False
.Unique = True
End With
......

Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Create....: " &
ex.ToString)
End Try

Die Zuweisung per .DataType = System.Type.GetType("system.Int32") ist
in verschiedenen Beispiel so genannt, auch außerhalb der MSDN.
Post by Peter Fleischer
Post by Bruno Uato
Die
Beispiele aus MSDN etc. funktionieren bei mir nicht.
Das Projekt wird
compiled, steigt aber beim debuggen ohne Fehlermeldung aus. Ein Try
catch brachte ans Licht, das der Datatype nicht valid ist. Das bringt
mich schon sehr ins Rätseln?
Mfg, Bruno
Peter Fleischer
2005-10-16 20:16:53 UTC
Permalink
Bruno Uato wrote:
...
Post by Bruno Uato
Post by Peter Fleischer
Post by Bruno Uato
Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt.
Ein Type einer Spalte ist der ADO.NET-Typ des Inhaltes, z.B. String,
Int32, Date usw.
Private Sub CreateRabattstaffeln()
'Die ganzen Zuordungen für Dataset und Datagrid etc.
Try
'System.Data.DataColumn
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
Bruno,
und warum ist die Type-Zuweisung auskommentiert?

...
Post by Bruno Uato
Die Zuweisung per .DataType = System.Type.GetType("system.Int32") ist
in verschiedenen Beispiel so genannt, auch außerhalb der MSDN.
Ist ja auch gut so. Unpassender Type einer Spalte in der Datenbank zum
Spaltentyp in der Tabelle im Client bringt Fehler beim Versuch des
Abgleiches (Fill oder Update) der Daten, da unklar ist, wie beispielsweise
ein Buchstabe "A" in eine Zahl umzuwandeln ist.
Post by Bruno Uato
Post by Peter Fleischer
Post by Bruno Uato
Die
Beispiele aus MSDN etc. funktionieren bei mir nicht.
Das Projekt wird
compiled, steigt aber beim debuggen ohne Fehlermeldung aus. Ein Try
catch brachte ans Licht, das der Datatype nicht valid ist. Das
bringt mich schon sehr ins Rätseln?
Es ist immer noch unklar, welcher Feldtyp in der Datenbank steht.

Peter
Bruno Uato
2005-10-17 12:15:43 UTC
Permalink
On Sun, 16 Oct 2005 22:16:53 +0200, "Peter Fleischer"
Post by Peter Fleischer
...
Post by Bruno Uato
Ich
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
Bruno,
und warum ist die Type-Zuweisung auskommentiert?
Weil Sie zwar kompeliert, aber beim Debuggen zu einem Crash führt.
Post by Peter Fleischer
Post by Bruno Uato
Die Zuweisung per .DataType = System.Type.GetType("system.Int32") ist
in verschiedenen Beispiel so genannt, auch außerhalb der MSDN.
Ist ja auch gut so. Unpassender Type einer Spalte in der Datenbank zum
Spaltentyp in der Tabelle im Client bringt Fehler beim Versuch des
Abgleiches (Fill oder Update) der Daten, da unklar ist, wie beispielsweise
ein Buchstabe "A" in eine Zahl umzuwandeln ist.
Es ist immer noch unklar, welcher Feldtyp in der Datenbank steht.
Wie gesagt blutiger Anfänger....
Also per Designer ein Datagrid auf einer Form plaziert. Per Code ein
Dataset und drei DataColumn erzeugt und Syles für die das Datagrid

Private DataColumnMengeAb As New System.Data.DataColumn
Private DataColumnStueckpreis As New System.Data.DataColumn
Private DataColumnGesamtkosten As New System.Data.DataColumn

Private DataGridTableStyleRabattstaffel As New
System.Windows.Forms.DataGridTableStyle
Private DataGridColumnStyleMengeAb As
System.Windows.Forms.DataGridColumnStyle = New
System.Windows.Forms.DataGridTextBoxColumn

Private DataGridColumnStyleStueckpreis As
System.Windows.Forms.DataGridColumnStyle = New
System.Windows.Forms.DataGridTextBoxColumn

in eier Sub erfolgt dann die Zuweisung

Private Sub CreateRabattstaffeln()
'Die ganze Zuordungen für Dataset und Datagrid etc.
Try

'System.Data.DataColumn
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
.ColumnName = "MengeAb"
.ReadOnly = False
.Unique = True
End With

With DataColumnStueckpreis
'.DataType = System.Type.GetType("system.double")
.ColumnName = "Stueckpreis"
.ReadOnly = False
.Unique = False
End With

With DataColumnGesamtkosten
.ColumnName = "Gesamtkosten"
.ReadOnly = False
.Unique = False
End With

With DataTableRabattstaffel
.Columns.Add(DataColumnMengeAb)
.Columns.Add(DataColumnStueckpreis)
.Columns.Add(DataColumnGesamtkosten)
End With

With DataGridColumnStyleMengeAb
.HeaderText = "Menge ab"
.Width = 100
.MappingName = "MengeAb"
End With

With DataGridColumnStyleStueckpreis
.HeaderText = "Stückpreis"
.Width = 150
.MappingName = "Stueckpreis"
End With

With DataGridTableStyleRabattstaffel
.GridColumnStyles.Add(DataGridColumnStyleMengeAb)

.GridColumnStyles.Add(DataGridColumnStyleStueckpreis)
End With

With DataGridRabattStaffel
'Alles löschen
.DataBindings.Clear()
.TableStyles.Clear()
.DataSource = Nothing

.TableStyles.Add(DataGridTableStyleRabattstaffel)
.DataSource = DataTableRabattstaffel
.HeaderBackColor = System.Drawing.Color.White
.CaptionText = "Rabattstaffel eintragen"
End With

'Die erste Menge mit 1 vorbelegen
'Spalte 0 ist die Menge, Spalte 1 der Preis, Spalte 2
die Gesamtkosten
Dim Zeile As System.Data.DataRow
Zeile = Me.DataTableRabattstaffel.NewRow
DataTableRabattstaffel.Rows.Add(Zeile)
DataTableRabattstaffel.Rows(0).Item(0) = 1

Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Create....: " &
ex.ToString)
End Try
End Sub

ich lade von keiner Datenbank Daten in das Dataset, sondern benutze
Datagrid als Eingabe und Dataset als Speicher für meine Daten und
weiteren Berechnungen. Ich dachte ich weise dem Datacolumn einen
Datatype zu und mache ihn somit Typsicher.

Mfg, Bruno
Peter Fleischer
2005-10-17 14:14:04 UTC
Permalink
Bruno Uato wrote:
...
Post by Bruno Uato
Post by Peter Fleischer
Post by Bruno Uato
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
Bruno,
und warum ist die Type-Zuweisung auskommentiert?
Weil Sie zwar kompeliert, aber beim Debuggen zu einem Crash führt.
Bruno,
du musst den Type richtig angeben:

With DataColumnMengeAb
.DataType = System.Type.GetType("System.Int32")

Damit funktioniert es bei mir fehlerfrei.

...
Post by Bruno Uato
ich lade von keiner Datenbank Daten in das Dataset, sondern benutze
Datagrid als Eingabe und Dataset als Speicher für meine Daten und
weiteren Berechnungen. Ich dachte ich weise dem Datacolumn einen
Datatype zu und mache ihn somit Typsicher.
Aber bitte richtig!

Peter
Bruno Uato
2005-10-17 21:06:10 UTC
Permalink
Post by Peter Fleischer
Post by Bruno Uato
With DataColumnMengeAb
'.DataType = System.Type.GetType("system.Int32")
Bruno,
With DataColumnMengeAb
.DataType = System.Type.GetType("System.Int32")
Damit funktioniert es bei mir fehlerfrei.
Aber bitte richtig!
Peter
Also ich muss zur meiner Schande gestehen, dass ich ein paar Sekunden
gezögert habe bis ich den Unterschied gesehen habe. Wäre von selber
nicht draufgekommen, dass er sich an der Groß/Kleinschreibung
aufhängt.

Merci Peter, Bruno
Peter Fleischer
2005-10-18 04:19:47 UTC
Permalink
Bruno Uato wrote:
...
Post by Bruno Uato
Also ich muss zur meiner Schande gestehen, dass ich ein paar Sekunden
gezögert habe bis ich den Unterschied gesehen habe. Wäre von selber
nicht draufgekommen, dass er sich an der Groß/Kleinschreibung
aufhängt.
Bruno,
ich hätte das aber auch 2 Postings früher erkennen können:-)

Peter
Bruno Uato
2005-10-18 21:34:26 UTC
Permalink
On Tue, 18 Oct 2005 06:19:47 +0200, "Peter Fleischer"
Post by Peter Fleischer
...
Post by Bruno Uato
Also ich muss zur meiner Schande gestehen, dass ich ein paar Sekunden
gezögert habe bis ich den Unterschied gesehen habe. Wäre von selber
nicht draufgekommen, dass er sich an der Groß/Kleinschreibung
aufhängt.
Bruno,
ich hätte das aber auch 2 Postings früher erkennen können:-)
Peter
Vieleicht hätte ich mir die Überladungsliste besser angesehen, dann
wäre mir auch Ignorecase aufgefallen.

Mfg, Bruno
Elmar Boye
2005-10-18 07:21:51 UTC
Permalink
Hallo Bruno,
Post by Bruno Uato
Post by Bruno Uato
With DataColumnMengeAb
'.DataType =
System.Type.GetType("system.Int32")
With DataColumnMengeAb
.DataType = System.Type.GetType("System.Int32")
Damit funktioniert es bei mir fehlerfrei.
Damit es bereits der Compiler erkennen kann, bietet sich an
.DataType = GetType(Sytem.Int32)
oder auch
.DataType = GetType(Integer)
zu schreiben, um das VB Sprachäquivalent zu verwenden.

Gruss
Elmar
Peter Götz
2005-10-15 17:45:03 UTC
Permalink
Hallo Bruno,
Post by Bruno Uato
leider bin ich mit Datagrid, Dataset etc. noch nicht so vertraut. Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt. Die
Beispiele aus MSDN etc. funktionieren bei mir nicht.
Schau Dir mal

www.gssg.de -> Visual Basic -> VB.net -> DataGridNumericColumn

an. Dieses Beispiel lässt in einer Spalte nur numerische Eingaben zu. Die
Anzahl der bei der Eingabe zulässigen Dezimalstellen wird über die
Eigenschaft .NumDecimales eingestellt.
Diese Eigenschaft legt auch fest, mit welcher Anzahl von Dezimalstellen ein
vorhandener Wert bei der Anzeige formatiert wird.
.NumDecimales = 0 bewirkt, dass nur noch ganzzahlige Werte eingegeben werden
können.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Bruno Uato
2005-10-16 19:15:33 UTC
Permalink
On Sat, 15 Oct 2005 19:45:03 +0200, Peter Götz
Post by Peter Götz
Hallo Bruno,
Post by Bruno Uato
leider bin ich mit Datagrid, Dataset etc. noch nicht so vertraut. Ich
bin immer noch am Rätseln was Datatype der DataColumn mir bringt. Die
Beispiele aus MSDN etc. funktionieren bei mir nicht.
Schau Dir mal
www.gssg.de -> Visual Basic -> VB.net -> DataGridNumericColumn
an. Dieses Beispiel lässt in einer Spalte nur numerische Eingaben zu. Die
Anzahl der bei der Eingabe zulässigen Dezimalstellen wird über die
Eigenschaft .NumDecimales eingestellt.
Diese Eigenschaft legt auch fest, mit welcher Anzahl von Dezimalstellen ein
vorhandener Wert bei der Anzeige formatiert wird.
.NumDecimales = 0 bewirkt, dass nur noch ganzzahlige Werte eingegeben werden
können.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Klingt gut, werde ich mir ansehen.

Mfg, Bruno
Bruno Uato
2005-10-18 21:33:13 UTC
Permalink
Post by Peter Götz
Schau Dir mal
www.gssg.de -> Visual Basic -> VB.net -> DataGridNumericColumn
an. Dieses Beispiel lässt in einer Spalte nur numerische Eingaben zu. Die
Anzahl der bei der Eingabe zulässigen Dezimalstellen wird über die
Eigenschaft .NumDecimales eingestellt.
Diese Eigenschaft legt auch fest, mit welcher Anzahl von Dezimalstellen ein
vorhandener Wert bei der Anzeige formatiert wird.
.NumDecimales = 0 bewirkt, dass nur noch ganzzahlige Werte eingegeben werden
können.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
Hallo Peter,

ich hab das jetzt in mein Projekt eingebunden und es scheint gut zu
funktionieren. Dank dir.

Mfg, Bruno

Loading...