none
VB.Net ve SQL Server 2012 Tek Formda Arama Sorunu (C# kullanmıyorum. VB kullanıyorum.) RRS feed

  • Soru

  • Kısaca : Textbox1 Arama & Datagridview populate yada refresh & Textbox2.datafield refresh & Tuşa basınca Datagridview columns(1) başka bir textboxa aktarma

    Arkadaşlar merhaba;

    Böyle bir form var.. Üstteki arama textbox içinde kelimeyi yazdıkça datagridview ve en alttaki id kolon aynı anda refresh yaparak (id_textbox default olarak datagridview'in ilk satırındaki 1. kolonu gösterecek şekilde) veritabanını arayacak.
    Diyelim ki "KE" yazdım ve veritabanında AD kolonunda KE ile başlayanlar datagridview'da listelendi ve ID textbox'ta datagridview'deki ilk satırın 1. kolonundaki veriyi getirdi.
    10 Adet KE ile başlayan AD kolonunu gösteren datagridview için yukarıda arama textbox'ın içinde iken yukarı ve aşağı ok tuşuna bastıkça datagridview'de aşağı ve yukarı doğru grid içinde gezebilmeliyim. Çünkü üzerine geldiğim veri eğer aradığım veri ise arama textbox'ın içinde iken enter'â bastığımda Aktar tuşunun performclick özelliği ile ID kolonunun verisini başka bir formdaki textbox'ın içine atabilmeliyim..
    Tüm istediğim şey bunu yapabilmek.. 
    Sorunlar..
    1. Aramayı oledbdataadapter ile yaptığımda ID kolonu refresh yapmıyor.
    2. Aramayı SQLclient ile bağlantı yapıp arama yapacak olursam datagridview refresh yapmıyor.
    3. Her ikisini birden zaten yaptıramadığım gibi datagrid'te üzerine geldiğim veriyi eğer tuşlar ile bulursam selected özelliği ile atabiliyorum. Fakat ilk satırdaki datagridview verisi benim için uygun olan arama ise datagrid'in selected özelliği hata veriyor bu seferde currentrow özelliğini kullanabiliyorum.
    Yani 3. maddedeki sorunu yukarı ve aşağı tuşlarına basılmadığını kontrol ederek yapmam gerekiyor. Dim ile public kısmında integer bir değişken atayıp yukarı ve aşağı ok tuşlarına basılınca değeri 0'dan + (artıya) doğru birer birer artırarak sonrasında kontrol ederek ya selectedrow yada currentrow özelliğini kullanmam gerekiyor ki.. Bu gerçekten yorucu ve saçma geliyor..
    Bana bu konuda kim yardım edebilir? 
    Lütfen bilen arkadaşlardan örnek bir çalışma isteyebilir miyim?
    Teşekkür eder yardımlarınız için şimdiden çok teşekkür ederim.



    18 Kasım 2019 Pazartesi 13:21

Tüm Yanıtlar

  • Sorudan anladigim bu:

    Private db As DataContext = New DataContext("server=.\SQLexpress;trusted_connection=yes;database=Northwind")
    Private customers As List(Of Customer)
    
    Private Sub Main()
    	customers = db.GetTable(Of Customer)().ToList()
    	Dim f As Form = New Form With {
    		.Width = 600,
    		.Height = 600
    	}
    	Dim cnt As SplitContainer = New SplitContainer With {
    		.Orientation = Orientation.Horizontal,
    		.Dock = DockStyle.Fill
    	}
    	f.Controls.Add(cnt)
    	cnt.SplitterDistance = 50
    	Dim txtArama As TextBox = New TextBox With {
    		.Top = 10,
    		.Left = 10,
    		.Width = 150
    	}
    	Dim btnAktar As Button = New Button With {
    		.Top = 10,
    		.Left = 180,
    		.Text = "Aktar",
    		.Width = 100
    	}
    	Dim txtId As TextBox = New TextBox With {
    		.Top = 10,
    		.Left = 300,
    		.Width = 150
    	}
    	Dim dgv As DataGridView = New DataGridView With {
    		.Dock = DockStyle.Fill,
    		.DataSource = customers
    	}
    	cnt.Panel1.Controls.AddRange(New Control() {txtArama, btnAktar, txtId})
    	cnt.Panel2.Controls.Add(dgv)
    	cnt.Panel1MinSize = 40
    	Addhandler txtArama.TextChanged, Function(sender, e)
    			Dim data = customers.Where(Function(c) c.CompanyName.ToLower().StartsWith(txtArama.Text.ToLower().Trim())).ToList()
    			dgv.DataSource = Nothing
    			dgv.DataSource = data
    			Dim fi = data.FirstOrDefault()
    
    			If fi IsNot Nothing Then
    				txtId.Text = fi.CustomerID
    			End If
    		End Function
    
    	Addhandler dgv.CellEnter, Function(sender, e)
    	 		txtId.Text = CStr(dgv.Rows(e.RowIndex).Cells("CustomerId").Value)
    		End Function
    
    	AddHandler btnAktar.Click, Function(sender, e)
    			MessageBox.Show(txtId.Text)
    		End Function
    
    	f.Show()
    End Sub
    
    <Table(Name:="Customers")>
    Public Class Customer
    	<Column>
    	Public Property CustomerID As String
    	<Column>
    	Public Property CompanyName As String
    	<Column>
    	Public Property ContactName As String
    	<Column>
    	Public Property City As String
    	<Column>
    	Public Property Country As String
    End Class

    Notlar:

    Bu kodu dogrudan LinqPad'de calistirabilirsiniz (tabii Northwind ornek veritabanı var ise, gerekirse connectionstring'i degistirerek).

    Burada, büyük bir veri olmadıgı zaman kullanılacak bir yöntem ornekleniyor (daha baslangicta tum tablo icerigi istemci tarafına alınıyor - ondan sonra server'dan istek yok). Büyük tablolarda bunu yapmak istemeyeceksiniz, o zaman bir "istendikçe" ve "tampon belleğe alma" stratejisi kullanmalisiniz (textbox'ta karakter basına istek yapmak efektif olmayabilir - ya da duruma gore sadece ilk harf icin lokale alinabilir vs).

    Not2: Bana kızma ama, madem VB6'dan geciyorsun, VB.Net nasıl olsa yeni bir dil öğrenmek gibi, C# öğrenseniz daha iyi degil mi (düşünce sadece). 

     



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    20 Kasım 2019 Çarşamba 14:31
    Yanıtlayıcı
  • Teşekkür ederim. Elinize zamanınıza sağlık.. 
    21 Kasım 2019 Perşembe 06:18