Announcement

Collapse
No announcement yet.

Datagridview interaktiv Inhalte ändern.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datagridview interaktiv Inhalte ändern.

    Hallo Zusammen.
    Ich bin noch recht unerfahrener Programmierer und nutze Visual Basic 2005 mit einer 2005er SQL-Express DB.

    Ich habe in eine Form ein Datagridview eingebunden, in der ein Table aus der DB dargestellt wird. Ich möchte nun, dass der Benutzer über die Oberfläche (meinetwegen in eine Textbox) eine ID eingeben kann. Daraufhin soll die SQL Abfrage so geändert werden, dass die Daten im Datagridview daraufhin aktualisiert werden.

    Ich dachte ich kann dies über eine Variable im Dataset steuern, aber wie es scheint wird die XML fest geladen und ist während der Programmlaufzeit nicht änderbar.
    Ich kann aber auch nicht alle Abfragen "vordefinieren".
    Wie kann ich das lösen?
    Hat jemand Tipps oder Beispiele?

    Vielen Dank,
    Gruß,
    Andreas

  • #2
    Hallo,

    das DataSet speichert die Ergebnismengen von SELECT-Abfrage völlig unabhängig von einer Datenbank. Nur der von Visual Studio 2005 generierte TableAdapter ist als Verbindungsglied zwischen dem DataSet und der Datenbank für derartige Aufgaben zuständig. Im DataSet-Designer wird dazu eine neue Abfrage im TableAdapter angelegt, wobei dort die SELECT-Anweisung um den benötigten Parameter ergänzt wird. Der TableAdapter kann beliebig viele (unterschiedliche) Abfragen für die gleiche Datenbanktabelle ausführen.

    Das Ganze sieht zum Beispiel so aus (das vollständige Projekt ist als Anlage beigefügt):

    Code:
        '
        ' 1. ComboBox1: Zeilen A, B und C werden in die Eigenschaft Items eingetragen
        '
        ' 2. DataSet Designer: TableAdapter erhält eine neue Query-Methode für die Abfrage
        '    SELECT testtbl_id, wert, kriterium FROM dbo.TestTbl WHERE kriterium = @kriterium
        '
        ' 3. Listbox über das Data Source-Fenster mit der DataTable im typisierten Dataset 
        '    verbinden
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles MyBase.Load
            '
            ' ListBox-Eigenschaften setzen
            '
            WertListBox.TabStop = False
            WertListBox.SelectionMode = SelectionMode.None
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            '
            ' ComboBox-Auswahl füllt das DataSet neu, indem die spezielle Query-Methode
            ' des TableAdapters aufgerufen wird
            '
            Dim sKriterium As String = ComboBox1.Text
            If (Not String.IsNullOrEmpty(sKriterium)) Then
                TestTblTableAdapter.FillByKriterium(TempdbDataSet.TestTbl, sKriterium)
                ToolStripStatusLabel1.Text = sKriterium
            End If
        End Sub
    
        Private Sub Form1_FormClosing(ByVal sender As System.Object, _
          ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            '
            ' Datenbindung deaktivieren
            '
            WertListBox.DataSource = Nothing
        End Sub
    Attached Files

    Comment


    • #3
      Hallo Andreas,
      Vielen Dank für die ausführliche Antwort. Die Lösung scheint genau das richtige zu sein.
      Ist schon getestet und funktioniert!!!
      Vielen Dank noch mal,
      Andreas
      Zuletzt editiert von AKrohn; 19.03.2007, 11:35.

      Comment

      Working...
      X