Announcement

Collapse
No announcement yet.

VB2005 - Listbox

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

  • VB2005 - Listbox

    Hallo zusammen,
    ich habe eine ListBox, welche ich über eine DataTable im DataSource fülle.
    Die Listbox wird jedes Mal beim Ändern eines Eintrages einer ComboBox neu gefüllt.

    Bis dahin ist noch alles OK.

    Nun möchte ich die Listbox nur als „Anzeigemedium“ benutzen. Also keinen TabStop und auch keine Markierungsmöglichkeit der Listeneinträge.

    Ich habe dazu TabStop auf false gesetzt. Dies funktioniert auch noch.

    Nun habe ich noch den SelectionMode auf None gestellt. Jetzt wird die Liste nicht mehr beim Ändern des Eintrages der ComboBox aufgefrischt.

    Was mache ich falsch...?
    Hat jemand einen Tipp...?

  • #2
    Hallo,

    die Datenbindung verwendet implizit hinter den Kulissen einen Transaktionsmechanismus für die Übernahme einer Änderung in der Benutzeroberfläche in das darunterliegende DataSet (DataTable). Erst dann, wenn die BindingSource-Methode EndEdit aufgerufen wird, ist der Transaktionszustand definiert. Das folgende Beispiel aktualisiert die Listbox unabhängig von der Einstellung der Eigenschaften TabStop bzw. SelectionMode.

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_Load(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.Load</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataSet1.DataTable1.AddDataTable1Row(<span style="color: #a31515;">"Test 1"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataSet1.DataTable1.AddDataTable1Row(<span style="color: #a31515;">"Test 2"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataSet1.DataTable1.AddDataTable1Row(<span style="color: #a31515;">"Test 3"</span>)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ListBox1.DataSource = DataTable1BindingSource</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ListBox1.DisplayMember = <span style="color: #a31515;">"wert"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ListBox1.TabStop = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ListBox1.SelectionMode = SelectionMode.None</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> ToolStripButton1_Click(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> ToolStripButton1.Click</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataTable1BindingSource.EndEdit()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_FormClosing(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.Forms.FormClosingEventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.FormClosing</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ListBox1.DataSource = <span style="color: blue;">Nothing</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p></div>

    Comment


    • #3
      Hallo,
      Der Code ist mir nicht ganz klar...

      Originally posted by Andreas Kosch View Post

      ListBox1.DataSource = DataTable1BindingSource
      Hier mal mein Code:
      Code:
       Dim Cnn As New SqlConnection(PstrConnString)
          Dim dsLstData As New DataSet
          Dim daLstData As SqlDataAdapter
          Dim dtLstData As DataTable
      
         If Cnn.State = ConnectionState.Closed Then Cnn.Open()
      
          With Me
            .ToolStripStatusLabel.Text = "Fülle ListBox mit Werten..."
            .Refresh()
          End With
      
          dsLstData.Clear()
          daLstData = New SqlDataAdapter(strSQL, Cnn)
      
      Try
      
            dtLstData = New DataTable
            daLstData.Fill(dtLstData)
      
          Catch ex As SqlException
            Cnn.Close()
            Cnn.Dispose()
            errMsg = ex.Message
            Return False
          End Try
      
          Try
            With Me.LstBx
              .DataSource = Nothing
              .Items.Clear()
              If dtLstData.Rows.Count <= 0 Then Return True
              .DisplayMember = "MyVerteiler"
              .ValueMember = "IDM"
              .DataSource = dtLstData
        .TabStop = False
              .SelectionMode = SelectionMode.None
            End With
          Catch ex As Exception
            errMsg = ex.Message
            Return False
          Finally
            Cnn.Close()
            Cnn.Dispose()
            Me.ToolStripStatusLabel.Text = String.Empty
          End Try

      Wo ist denn bei mir der Fehler...?

      Vielleicht hab ich das mit der BindingSource nicht richtig verstanden.....
      Wo und wie müsste ich das in meinem Beispiel umsetzten...?


      Noch eine Anmerkung:
      Ich muss jedesmal, wenn ich SelectedIndexChanged der Combo auslöse um die Daten der Listbox anzuzeigen, ein neuen "Select" über die Datenbank geben....
      Zuletzt editiert von M Merlin; 21.02.2007, 17:03.

      Comment


      • #4
        Hallo,

        das folgende Beispiel demonstriert, wie der Inhalt der ListBox basierend auf dem ausgewählten ComboBox-Wert jeweils frisch von der MS SQL Server-Datenbanktabelle geladen wird. Das Beispiel nutzt die neuen Möglichkeiten der Datenbindung mit .NET 2.0 aus:

        <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">' 1. ComboBox1: Zeilen A, B und C werden in die Eigenschaft Items eingetragen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">' 2. DataSet Designer: TableAdapter erhält eine neue Query-Methode für die Abfrage</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">'&nbsp;&nbsp;&nbsp; SELECT testtbl_id, wert, kriterium FROM dbo.TestTbl WHERE kriterium = @kriterium</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">' 3. Listbox über das Data Source-Fenster mit der DataTable im typisierten Dataset </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: green;">'&nbsp;&nbsp;&nbsp; verbinden</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_Load(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.Load</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' ListBox-Eigenschaften setzen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WertListBox.TabStop = <span style="color: blue;">False</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WertListBox.SelectionMode = SelectionMode.None</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> ComboBox1_SelectedIndexChanged(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> ComboBox1.SelectedIndexChanged</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' ComboBox-Auswahl füllt das DataSet neu, indem die spezielle Query-Methode</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' des TableAdapters aufgerufen wird</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">'</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> sKriterium <span style="color: blue;">As</span> <span style="color: blue;">String</span> = ComboBox1.Text</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">If</span> (<span style="color: blue;">Not</span> <span style="color: blue;">String</span>.IsNullOrEmpty(sKriterium)) <span style="color: blue;">Then</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TestTblTableAdapter.FillByKriterium(TempdbDataSet. TestTbl, sKriterium)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ToolStripStatusLabel1.Text = sKriterium</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">If</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_FormClosing(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, _</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.Forms.FormClosingEventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.FormClosing</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WertListBox.DataSource = <span style="color: blue;">Nothing</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p></div>

        Alle anderen Programmzeilen haben die Wizards von Visual Studio (siehe tempdbDataSet.Designer.vb im beigefügten Beispiel) im Hintergrund automatisch verbaut. Das direkte Hantieren mit den Klassen SqlConnection, SqlDataAdapter und SqlCommand ist in ADO.NET 2.0 nicht mehr notwendig.


        Das VB-Beispielprojekt (inklusive des SQL-Scripts) ist im angehängten ZIP-Archiv zu finden.
        Attached Files

        Comment


        • #5
          Ok.Danke....

          Comment

          Working...
          X