2017-05-20 1 views
0

Update 5/21/17. Vielen Dank für den Vorschlag, eine Tabelle zu verwenden. Das war hilfreich. Ich habe es herausgefunden. Ich machte myinputable zu einer globalen Variable, indem ich die Dim-Anweisung oben deklarierte und sie zu einem Datagridview-Typ machte. Jetzt kann ich es in dem anderen Fall ausschalten, in dem ich es tun musste.Erfassen eines Ereignisses wie Mausklick in Datagridview in VB

Ich bin ein Neuling. Ich habe eine Datagridview in VB 2015 erstellt, um eine Reihe von Daten aus der Verwendung zu erfassen. Wenn der Benutzer mit der Dateneingabe fertig ist, möchte ich die Zellenwerte in meinen Variablen speichern. Ich weiß nicht, wie ich ein Ereignis aus meiner dynamisch erstellten Datagridview "myinputable" erfassen kann. Mein Code ist unten. Bitte helfen Sie.

Private Sub inputmodel() Dim Prompt As String Dim k As Integer ' ' zuerst das Problem Titel und die Anzahl der Ziele und Alternativen bekommen ' prompt = "Problem Titel eingeben:" title = InputBox (Eingabeaufforderung) prompt = "Geben Sie die Anzahl der Kriterien:" nobj = InputBox (Prompt) prompt = "Geben Sie die Anzahl der Alternativen:" NALT = InputBox (Prompt) '
' erstellen nun die Tabelle ' Dim Myinputable As New Datagridview Dim combocol As New DataGridViewComboBoxColumn combocol.Items.AddRange ("Erhöhung", "Decreaing", "Threashold")

For k = 1 To 6 
     If k <> 2 Then 
      Dim nc As New DataGridViewTextBoxColumn 
      nc.Name = "" 
      Myinputable.Columns.Add(nc) 
     Else 
      Myinputable.Columns.AddRange(combocol) 
     End If 
    Next k 

    ' now add the rows and place the spreadsheet on the form 

    Myinputable.Rows.Add(nobj - 1) 
    Myinputable.Location = New Point(25, 50) 

    Myinputable.AutoSize = True 
    Me.Controls.Add(Myinputable) 
    FlowLayoutPanel1.Visible = True 

    Myinputable.Columns(0).Name = "Name" 
    Myinputable.Columns(0).HeaderText = "Name" 

    Myinputable.Columns(1).Name = "Type" 
    Myinputable.Columns(1).HeaderText = "Type" 

    Myinputable.Columns(2).Name = "LThresh" 
    Myinputable.Columns(2).HeaderText = "Lower Threshold" 
    'Myinputable.Columns(2).ValueType = co 

    Myinputable.Columns(3).Name = "UThresh" 
    Myinputable.Columns(3).HeaderText = "Upper Threshold" 

    Myinputable.Columns(4).Name = "ABMin" 
    Myinputable.Columns(4).HeaderText = "Abs. Minimum" 

    Myinputable.Columns(5).Name = "ABMax" 
    Myinputable.Columns(5).HeaderText = "Abs. Maximum " 

    Myinputable.Rows(0).Cells(0).Value = "Help" 

    If Myinputable.Capture = True Then 
     MsgBox(" damn ") 
    End If 
    End Sub 
+0

Das DataGridView ist in erster Linie dazu gedacht, dem Benutzer eine * Ansicht * der * Daten * zu präsentieren. Es kann Daten speichern, aber dafür gibt es bessere Mechanismen - eine DataTable. - Damit können Sie auch numerische Werte als numerische Typen speichern. Keine Notwendigkeit für irgendwelche Heldentaten - der DGV wird die Daten in der DataTable für Sie speichern. – Plutonix

Antwort

0

Wie @Plutonix schon sagt, Sie durch die Schaffung eines DataTable beginnen soll . Fügen Sie dem DataTable Spalten des entsprechenden Typen hinzu, und binden Sie dann es an das Raster, d. H. Es dem Ihres Rasters z.

Dim table As New DataTable 

With table.Columns 
    .Add("ID", GetType(Integer)) 
    .Add("Name", GetType(String)) 
End With 

DataGridView1.DataSource = table 

, die automatisch die entsprechenden Spalten in das Netz hinzufügen, wenn es eine nicht bereits existiert, oder Sie können die Spalten im Designer hinzufügen und ihre DataPropertyName ihnen zu sagen, welche DataColumn zu binden. Wenn der Benutzer Änderungen im Raster vornimmt, werden die Daten automatisch an den zugrunde liegenden DataTable weitergeleitet.

Wenn Sie fertig sind, können Sie auf die Daten über die DataTable zugreifen und sogar das Los in einer Datenbank mit einem einzigen Aufruf der Update Methode eines Datenadapters speichern, wenn Sie möchten.

Verwandte Themen