Forum: VB.NET |
Thema:
AW: AW: DataGridView Fehler abfangen |
Von:
M Merlin (
01.08.2007 00:05) |
Hallo, danke das du für mein Problem Interesse zeigst...
Ich habe mir notdürftig geholfen ( siehe MouseDown des Gird )... Villeicht hast du eine bessere Lösung... würde mich über eine Antwort freuen...
Hier der Code... Ich hoffe du kannst da was mit anfangen...
Private Function FillGrid(ByRef DataCount As Integer) As Boolean
Dim Cnn As New SqlConnection(PstrConnString)
Dim ErrMsg As String = String.Empty
With Me
.ToolStripStatusLabel.Text = "Öffne Datenbank..."
.Refresh()
End With
If OpenDB(Cnn, ErrMsg, 3) = False Then
Windows.Forms.Cursor.Current = Cursors.Default
Me.ToolStripStatusLabel.Text = String.Empty
ErrMsg = "Datenbankfehler: " & vbCrLf & ErrMsg
Return False
End If
With Me
.ToolStripStatusLabel.Text = "Fülle Tabelle mit Werten..."
.Refresh()
End With
Try
dsData.Reset()
daData = New SqlDataAdapter(strCmdString, Cnn)
daData.Fill(dsData, "MyData")
daData.MissingSchemaAction = MissingSchemaAction.AddWithKey
dtData = dsData.Tables("MyData")
DataCount = dtData.Rows.Count
With Me.MyDtGrdView
.DataBindings.Clear()
.DataSource = Nothing
.DataSource = dsData.Tables("MyData")
End With
Catch ex As Exception
Finally
Cnn.Close()
Cnn.Dispose()
End Try
Me.ToolStripStatusLabel.Text = String.Empty
If DataCount < 1 Then Return False Else Return True
End Function
Private Sub ExtendGrid(ByVal CountData As Integer)
If CountData <= MaxRow Then
With Me
.MyDtGrdView.Height = CountData * HeighGridRow + MyHeightGrid '42 '24 Blaue Kopfzeile
.Height = MyHeight + CountData * HeighGridRow
.Top = MyTop - CInt((CountData * HeighGridRow / 2))
'FormatGrid(False)
End With
Else
With Me
.MyDtGrdView.Height = MyHeightGrid + MaxRow * HeighGridRow
.Height = MyHeight + MaxRow * HeighGridRow
.Top = MyTop - CInt((MaxRow * HeighGridRow / 2))
'FormatGrid(True)
End With
End If
End Sub
Private Sub FormatGrid()
'Private Sub FormatGrid(ByVal blnMaxRow As Boolean)
With Me.MyDtGrdView
.MultiSelect = False
.ScrollBars = ScrollBars.Vertical
'.ReadOnly=False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = True
.RowHeadersVisible = True
.RowHeadersWidth = 40 'Darf nicht keiner sein, da sonst der Errortext nicht angezeigt wird
.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
.AllowUserToResizeRows = False
.ColumnHeadersHeight = 24
.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
.AlternatingRowsDefaultCellStyle.BackColor = Color.LightSteelBlue
.RowTemplate.Height = HeighGridRow
'.ColumnHeadersDefaultCellStyle.NullValue = String.Empty
Try
.Columns("MyID").Visible = False
Catch ex As Exception
MsgBox("Fehler in der Tabellenformatierung !", MsgBoxStyle.Critical, "DataGridView")
Err.Clear()
blnMyClose = False
If frmMainMenu.Visible = True Then frmMainMenu.Close()
Me.Close()
Exit Sub
End Try
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
'.AllowUserToResizeColumns = False
With .Columns("Nummer")
.Width = .Width - 80
End With
End With
End Sub
Private Sub MyDtGrdView_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyDtGrdView.MouseDown
Dim MyGrid As DataGridView = CType(sender, DataGridView)
Dim HitTest As DataGridView.HitTestInfo
blnRowHeaderGridClick = False
If e.Button = Windows.Forms.MouseButtons.Left Then
HitTest = MyGrid.HitTest(e.Location.X, e.Location.Y)
If HitTest.Type = DataGridViewHitTestType.RowHeader Then
blnRowHeaderGridClick = True
End If
End If
End Sub
Private Sub dtData_ColumnChanging(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dtData.ColumnChanging
If Me.MyDtGrdView.CurrentCell.IsInEditMode = False Then Return
e.Row.ClearErrors()
Select Case e.Column.ColumnName
Case "Nummer"
If IsNothing(e.ProposedValue) Then
e.Row.RowError = "Farbnummer eingegeben werden !"
Return
ElseIf Not e.ProposedValue.ToString.Length = 8 Then
e.Row.RowError = "Nummer muss 8 Zeichen haben !"
Return
End If
Dim ColorNo As Long
Dim Result As Boolean
Result = Long.TryParse(e.ProposedValue.ToString.ToString, ColorNo)
If Result = False Then
e.Row.RowError = e.ProposedValue.ToString.ToString & "Nummer muss eine Zahl sein !"
Return
End If
Case "Text"
If IsNothing(e.ProposedValue) Then
e.Row.RowError = "Text muss eingegeben werden !"
Return
ElseIf e.ProposedValue.ToString.Length > 50 Then
e.Row.RowError = "Text darf maximal 50 Zeichen haben !"
Return
End If
Case Else
Throw New ArgumentException("Unbekannte Auswahl", MySelectedForm.ToString)
Return
End Select
e.Row.BeginEdit()
End Sub
Private Sub dtData_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dtData.ColumnChanged
e.Row.EndEdit()
UpdateGrid()
End Sub
Private Sub UpdateGrid()
If dsData.HasErrors = True Then
blnRowHeaderGridClick = False
Exit Sub
End If
If dsData.HasChanges = True Then
If blnRowHeaderGridClick = True Then
With Me.MyDtGrdView
.ClearSelection()
.CancelEdit()
End With
dtData.RejectChanges()
blnRowHeaderGridClick = False
MsgBox("Nach Datenänderung darf nicht auf den Zeilenkopf geklickt werden !" & vbCrLf & "Datenänderung bitte nochmals eingeben...", MsgBoxStyle.Critical, "Speichern")
Exit Sub
End If
Windows.Forms.Cursor.Current = Cursors.WaitCursor
PintPGB = 0
With Me
.ToolStripStatusLabel.Text = "Speichere Daten..."
.Refresh()
End With
PintPGB += 10
With Me.ToolStripProgressBar
.Maximum = 80
.Value = PintPGB
.Visible = True
End With
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
Try
Me.MyDtGrdView.EndEdit()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "UpdateGrid")
Exit Sub
End Try
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
Dim cnn As New SqlConnection(PstrConnString)
Dim daNewData As New SqlDataAdapter(strCmdString, cnn)
Dim cmdBldr As New SqlCommandBuilder(daNewData)
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
Try
If cnn.State = ConnectionState.Closed Then cnn.Open()
Catch ex As SqlException
Windows.Forms.Cursor.Current = Cursors.Default
cnn.Close()
cnn.Dispose()
MsgBox(ex.Message)
Exit Sub
End Try
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
Try
daNewData.Update(dtData.GetChanges)
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
Catch ex As SqlException
Windows.Forms.Cursor.Current = Cursors.Default
MsgBox(ex.Message, MsgBoxStyle.Critical, "UpdateGrid")
Me.MyDtGrdView.Refresh()
Catch ex As System.Data.DBConcurrencyException
Windows.Forms.Cursor.Current = Cursors.Default
MsgBox(ex.Message & vbCrLf & "Evtl. wurde der Datensatz zur selben Zeit durch eine andere Person geändert !", MsgBoxStyle.Critical, "UpdateGrid")
Me.MyDtGrdView.Refresh()
Catch ex As Exception
Windows.Forms.Cursor.Current = Cursors.Default
MsgBox(ex.Message, MsgBoxStyle.Critical, "UpdateGrid")
Me.MyDtGrdView.Refresh()
Finally
PintPGB += 10
Me.ToolStripProgressBar.Value = PintPGB
If Not IsNothing(cmdBldr) Then cmdBldr.Dispose()
If cnn.State = ConnectionState.Open Then cnn.Close()
cnn.Dispose()
Dim intCountData As Integer = 0
FillGrid(intCountData)
FormatGrid()
PintPGB += 10
With Me
With .ToolStripProgressBar
.Value = PintPGB
.Value = 0
.Visible = False
End With
.ToolStripStatusLabel.Text = String.Empty
End With
Windows.Forms.Cursor.Current = Cursors.Default
If dsData.Tables("MyData").Rows.Count <> intCountData Then
MsgBox("Fehler: CountError", MsgBoxStyle.Critical, "UpdateGrid")
End If
End Try
End If
End Sub
Betreff |
Von |
Datum |
|
|
AW: AW: AW: DataGridView Fehler abfangen
Hi,<br><br>also ich kann machen was ich will. Ich krieg den Fehler nicht nachgebaut. Schau Dir den Stack Trace der Fehlermeldung genau an. Da steht dann auch in welcher Codezeile der Fehler genau geworfen... |
|
|
|
|
|
Thomas
Hauser
|
01.08.2007 01:53 |
|
|
AW: AW: AW: AW: DataGridView Fehler abfangen
Hallo,<br>ich hab noch vergessen, nach dem ich das Update fahre, Refreshe ich das Grid, um evtl. weitere Änderungen durch andere User, mit zu übernehmen (anzuzeigen)...<br>Das mache ich dann wie... |
|
|
|
|
|
M
Merlin
|
01.08.2007 08:47 |
|
|
AW: AW: AW: DataGridView Fehler abfangen
Hallo,<br><br>ich würde an dieser Stelle gerne sagen, was das Problem ist. Aber ich müsste definitiv das ganze Projekt nachbauen, um den Fehler nachvollziehen zu können. Hat das auch sicher was mit dem... |
|
|
|
|
|
Thomas
Hauser
|
01.08.2007 10:41 |
|
|
M
Merlin
|
01.08.2007 15:13 |
|
|
Bernhard
Grojer
|
01.08.2007 15:30 |
|
|
AW: AW: AW: AW: DataGridView Fehler abfangen
Hallo,<br>ich habe ein Zip-File als Anhang mit einem kleinen Beispielprojekt.<br><br>Es wir dazu eine SQL-Server Datenbank mit dem Namen Testen benötigt.<br><br>Hier der SQL-Skript für die Tabelle Test:<br><br>if... |
|
|
|
|
|
M
Merlin
|
02.08.2007 09:52 |
|
|
M
Merlin
|
05.08.2007 22:57 |
|
|
AW: AW: AW: AW: AW: AW: DataGridView Fehler...
Hallo,<br><br>also ich habe mir ja echt die Arbeit gemacht und das Projekt durchgeschaut. Ich komm nicht auf den Fehler. Laut Stack Trace kommt der Fehler aus dem Steuerelement. Aber dann müsste das in... |
|
|
|
|
|
Thomas
Hauser
|
08.08.2007 18:03 |
|
|
AW: AW: AW: AW: AW: AW: AW: DataGridView...
Danke erst Mal für deine Mühe....<br><br>Wenn ich Mal etwas mher Zeit habe muss ich da dann doch wohl man ran und das alles umschreiben....<br><br>Jetzt habe ich mir erst Mal damit geholfen, dass ich den... |
|
|
|
|
|
M
Merlin
|
09.08.2007 14:26 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!