DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren



 

Forum: VB.NET | Thema: Re: Event bei datagrid-zellen Änderung triggern | Von: Tobi Ulm ( 20.06.2005 13:54)

Hi Armin,

so müsste es gehen


Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Data


Public Class Form1
Inherits System.Windows.Forms.Form
Private WithEvents dataGrid1 As System.Windows.Forms.DataGrid
Private label1 As System.Windows.Forms.Label

Private components As System.ComponentModel.Container = Nothing


Public Sub New()
'
' Required for Windows Form Designer support
'
InitializeComponent()
End Sub 'New

'
' TODO: Add any constructor code after InitializeComponent call
'


Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub 'Dispose

#Region "Windows Form Designer generated code"

'/ <summary>
'/ Required method for Designer support - do not modify
'/ the contents of this method with the code editor.
'/ </summary>
Private Sub InitializeComponent()
Me.dataGrid1 = New System.Windows.Forms.DataGrid()
Me.label1 = New System.Windows.Forms.Label()
CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
' dataGrid1
'
Me.dataGrid1.Anchor = System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right
Me.dataGrid1.DataMember = ""
Me.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.dataGrid1.Location = New System.Drawing.Point(40, 24)
Me.dataGrid1.Name = "dataGrid1"
Me.dataGrid1.Size = New System.Drawing.Size(360, 224)
Me.dataGrid1.TabIndex = 0
'
' label1
'
Me.label1.Anchor = System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right
Me.label1.Location = New System.Drawing.Point(112, 264)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(224, 23)
Me.label1.TabIndex = 1
'
' Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(440, 294)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.label1, Me.dataGrid1})
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub 'InitializeComponent
#End Region



<STAThread()> _
Shared Sub Main()
Application.Run(New Form1())
End Sub 'Main


Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'add a DataGridTableStyle so GridColumnStyles will be generated...
Dim dgts As New DataGridTableStyle()
dgts.MappingName = "MyTable"
Me.dataGrid1.TableStyles.Add(dgts)

'set the datasource
Dim dt As DataTable = Me.GetTheTable()
Me.dataGrid1.DataSource = dt

'hook the handlers for each of the TextBoxes in the generated columnstyles
Dim i As Integer
For i = 0 To dt.Columns.Count - 1
Dim dgtbc As DataGridTextBoxColumn = dgts.GridColumnStyles(i)
If Not (dgtbc Is Nothing) Then
AddHandler dgtbc.TextBox.TextChanged, AddressOf dataGrid_TextChanged
End If
Next
End Sub 'Form1_Load


#Region "Cell Start Editing"
Private lastEditedRow As Integer = -1
Private lastEditedCol As Integer = -1

Private Sub dataGrid_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim dgcc As DataGridCell = Me.dataGrid1.CurrentCell
Dim tb As TextBox = GetEmbeddedTextBox(dgcc.ColumnNumber)
If Not (tb Is Nothing) Then
Dim oldValue As String = Me.dataGrid1(dgcc).ToString()
Dim newValue As String = tb.Text
If newValue <> oldValue AndAlso (dgcc.RowNumber <> lastEditedRow OrElse dgcc.ColumnNumber <> lastEditedCol) Then
Dim s As String = String.Format("{0},{1} started editing", dgcc.RowNumber, dgcc.ColumnNumber)
Me.label1.Text = s
Console.WriteLine(s)
lastEditedRow = dgcc.RowNumber
lastEditedCol = dgcc.ColumnNumber
End If
End If
End Sub 'dataGrid_TextChanged



Private Sub dataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dataGrid1.CurrentCellChanged
lastEditedRow = -1
lastEditedCol = -1
End Sub 'dataGrid1_CurrentCellChanged


Private Function GetEmbeddedTextBox(ByVal col As Integer) As TextBox
Dim tbc As DataGridTextBoxColumn = Me.dataGrid1.TableStyles("MyTable").GridColumnStyles(col)
If Not (tbc Is Nothing) AndAlso tbc.TextBox.Modified Then
Return tbc.TextBox
End If

Return Nothing
End Function 'GetEmbeddedTextBox

#End Region

#Region "Generate the DataTable"

Private Function GetTheTable() As DataTable
'create a datatable as the datasource
Dim dt As New DataTable("MyTable")

Dim nCols As Integer = 4
Dim nRows As Integer = 10

Dim i As Integer
For i = 0 To nCols - 1
dt.Columns.Add(New DataColumn(String.Format("Col{0}", i)))
Next i

For i = 0 To nRows
Dim dr As DataRow = dt.NewRow()
Dim j As Integer
For j = 0 To nCols - 1
dr(j) = String.Format("row{0} col{1}", i, j)
Next j
dt.Rows.Add(dr)

Next

Return dt
End Function 'GetTheTable
#End Region

End Class 'Form1

cu

Tobi


Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!

 Betreff:
 Nachricht: Den Beitrag finden Sie nun unter: http://beta.devtrain.de/foren Die Benutzerdaten und Foreninhalte von beta.devtrain.de und www.devtrain.de sind die selben.
Sie können sich dort sogar per RSS über neue Inhalte informieren lassen.
Bei Problemen bitte direkt Mail an asp [AT] ppedv.de.

 Signatur:

  



Login
Username:


Passwort:






Passwort vergessen?

Building und Connecting Know-how

© Copyright 2003 ppedv AG