VBNET'te datatable'den doldurduğum listtbox içindeki bilginin karşılığı nasıl bulurum

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Bir .mdb access dosyasında SIRA BASLIK NOTLAR sütunları var ben bunu bir tablo oluşturdum ve dataset'ten çektiğim verileri bu datatable'ye doldurdum ve bu datatable'deki verilerden BASLIK sütunundaki bilgileride Listbox içine aktardım sorunum şu ListBox içinde bir seçim yaptığımda BASLIK sütunundaki bu seçimin NOTLAR sütunundaki karşılığının TextBox içinde görüntülenmesini istiyorum bunu nasıl yapabilirim?
Şimdi diyebilirsiniz doğrudan datasetten yükle diye evet datasetten bu iş çok kolay oluyor ama o zaman listbox içindeki değerler üzerinde işlem yapılamıyor (salt okunur oluyor) DataTable kullanarak ListBox doldurulduğunda her işlem yapılabiliyor bu nedenle DataTable kullandım.

Kod:
Imports System.Data.OleDb

Public Class Form1
    Dim dt As New DataTable

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.ListBox1.Sorted = True
        Dim sutun(0) As DataColumn
        Dim baglantikodu As String = _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Bilgi.mdb;Persist Security Info=True;Jet OLEDB:Database Password=##"
        Dim baglan As OleDbConnection
        Dim da As OleDbDataAdapter
        Try
            baglan = New OleDbConnection(baglantikodu)
            da = New OleDbDataAdapter("Select * from BilgiBankasi", baglan)
            dt.Clear()
            da.Fill(dt)

            sutun(0) = dt.Columns("SIRA")
            dt.PrimaryKey = sutun
            baglan.Close()
  
            Me.ListBox1.DisplayMember = "BASLIK"
            Me.ListBox1.ValueMember = "SIRA"
            Me.TextBox1.DataBindings.Clear()

            Dim temp As String = Nothing
            For i As Integer = 0 To dt.Rows.Count - 1
                temp = dt.Rows(i)(1).ToString()
                ListBox1.Items.Add(temp)

            Next

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        ' İŞTE DÜZGÜN ÇALIŞMAYAN KOD BURDA ALTTAKİ KOD LİSTBOX'TA TIKLADIĞIM SEÇENEĞİN 
        ' NOTLAR SÜTUNUNDAKİ BİLGİSİNİN TEXTBOX'DA GÖRÜNTÜLENMESİNİ İSTİYORUM VE MÜMKÜNSE
        ' YAPILAN SEÇİMİN İNDEX NUMARASINIDA İSTİYORUM BAŞKA YERLERDE KULLANMAK İÇİN LAZIM OLACAK


        If ListBox1.SelectedIndex > -1 Then
            Dim index_numarasi As Integer = Convert.ToInt32(dt.Rows(ListBox1.SelectedIndex)(0))
            Dim Karsiligi As String = Convert.ToString(dt.Rows(ListBox1.SelectedIndex)(2))
            Me.TextBox1.Text = Karsiligi
        End If

    End Sub

End Class
 

mstfcck

Asistan
Katılım
18 Mart 2010
Mesajlar
174
Reaksiyon puanı
5
Puanları
0
Biraz karışık olucak ama aklıma ilk gelen şeyi söylim: Anladığım kadarı ile ListBox'da BASLIK sutunundaki veriler var ve herhangi birine tıkladığında DataTable'daki karşılığını istiyorsun. Bunun için ListBox'ın SelectedChange Event'ında şu mantıkta bir kod yazabilirsin;
- ListBox'da seçilen Text'i bir değişkende tutarsın. Bunu SelectedChange Event'ına yaz, veya buna benzer birkaç olay daha var onu da kullanabilirsin.
- Daha sonra bir for veya foreach döngüsü içinde Text'i tuttuğun değişkendeki değeri DataTable'daki BASLIK sutununun satırları ile tek tek karşılaştırırsın ve yine aynı döngü içinde if ile Text'i bulduğunda bir true değer gönderirsin. Daha sonra true değeri alınca DataTable'da kaçıncı satırda bulmuş bu değeri? 5 olduğunu varsayalım. Bu değerin karşılığını da NOTLAR sutununda 5 satırdan alabilirsin. Bunuda istediğin gibi TextBox'a yazdırabilirsin.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Aşağıdaki kodu yazmıştım ama bu kodda listbox içinde kaçıncı sıradaki satıra tıklıyorsan access dosyasındaki o satırdaki bilginin NOTLAR sütunundaki karşılığını textbox1'e yazıyor listbox'taki bilgiler alfabetik dizili olduğundan yanlış satırdaki bilgiler görünüyor yani işe yaramıyor
Kod:
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        If ListBox1.SelectedIndex > -1 Then
            Dim index_numarasi As Integer = Convert.ToInt32(dt.Rows(ListBox1.SelectedIndex)(0))
            Dim Karsiligi As String = Convert.ToString(dt.Rows(ListBox1.SelectedIndex)(2))
            Me.TextBox1.Text = Karsiligi
        End If

    End Sub
Sonra senin dediğine benzer aşağıdaki kodu yazdım bu çalışıyor görünüyor ama bir problem var projeye gizli bir datagridview ekledim ve datatable (dt) 'den içini doldurdum böylece listbox içinde bir seçim yaptığımda bu seçimi datagridview içinde arıyor varsa NOTLAR sütunundaki karşılığını textbox'a yazıyor bu koddaki sorun BASLIK sütunundaki bilgiler benzersiz değil sınırsız sayıda Ali sınırsız sayıda Mehmet olabilir ozaman kod doğru sonucu üretmez, tek benzersiz şey index numarası bu nedenle bana yapılan seçimin index numarası üzerinden NOTLAR sütunun daki karşılığını bulup textbox1'e yazdıracak kod gerekiyor

Kod:
Imports System.Data.OleDb

Public Class Form1
    Dim dt As New DataTable

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ListBox1.DataSource = Nothing
        Me.ListBox1.DataBindings.Clear()
        Me.ListBox1.Items.Clear()
        Me.ListBox1.Sorted = True
        Dim sutun(0) As DataColumn
        Dim baglantikodu As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Bilgi.mdb;Persist Security Info=True;Jet OLEDB:Database Password=##"
        Dim baglan As OleDbConnection
        Dim da As OleDbDataAdapter
        Try
            baglan = New OleDbConnection(baglantikodu)
            da = New OleDbDataAdapter("Select * from BilgiBankasi", baglan)
            dt.Clear()
            da.Fill(dt)

            sutun(0) = dt.Columns("SIRA")
            dt.PrimaryKey = sutun
            baglan.Close()
            Me.ListBox1.DisplayMember = "BASLIK"
            Me.ListBox1.ValueMember = "SIRA"
            Me.TextBox1.DataBindings.Clear()

            Dim temp As String = Nothing
            For i As Integer = 0 To dt.Rows.Count - 1
                temp = dt.Rows(i)(1).ToString()
                ListBox1.Items.Add(temp)

            Next

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        DataGridView1.DataSource = dt
        '  Aşağıdaki kod DataGridView içerisindekileri Alfabetik dizer
        DataGridView1.Sort(DataGridView1.Columns(1), _
    System.ComponentModel.ListSortDirection.Ascending)
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        Dim t As Integer
        t = DataGridView1.RowCount
        For i As Integer = 0 To t - 1
            If ListBox1.Text = DataGridView1.Rows(i).Cells(1).Value Then
                TextBox1.Text = DataGridView1.Rows(i).Cells(2).Value
            End If
        Next

    End Sub
End Class


ListBox1.SelectedIndex koduda index numarası yerine listbox içindeki sıra numarasını veriyor
 
Üst