DB

2016-03-21 28 views
1

bir sonraki satıra gitmeye çalışırken yinelenen bağlamaları hatası Ben tüm bu bağlayıcı şey yeni ama temelde benim formda sonraki düğmeye bastığımda her satırın görüntüleyen kodumda veriyorum ama kod sağlayacağım anlamına gelir Aşağıda, ona daha fazla kod eklemeden önce çalıştığından emin olmak istediğim bir temp.DB

Bölümümü yüklediğimde, ilk satırı formumun içine önyükleme yapar, böylece bir sonraki düğmeye bastığınızda sizi 2. satıra götürür ve bir sonraki satır 3'ü sıraya getirir, ancak ileri gitmek için vurduğumda satır 2'den satır 2'ye kadar hata alırsınız: Bu, koleksiyondaki iki bağlamanın aynı özelliğe bağlanmasına neden olur.

Kodu:

Private Sub click() 
    sql = "Select * from tbl" 
    Using dbcon As New OleDbConnection(ACEConnStr) 
     Using cmd As New OleDbCommand(sql, dbcon) 

      dbcon.Open() 

      dtSample = New DataTable 
      dtSample.Load(cmd.ExecuteReader) 

     End Using 
    End Using 

    ' initialize BS from DT 
    bsSample = New BindingSource(dtSample, Nothing) 

    TxtCI.DataBindings.Add("Text", bsSample, "CustomerID") 
End Sub 

Sonraki düğmesi:

Private Sub BtnNext_Click(sender As Object, e As EventArgs) Handles BtnNext.Click 
    click() 
    DataBindings.Clear() 
    bsSample.MoveNext() 

    BtnNext.Enabled = (bsSample.Count - 1 > bsSample.Position) 
End Sub 
+0

BtnNext_Click'ten nClick'i Kaldır - isteme veya yeniden bağlama gereği yoktur. Ayrıca 'DataBindings.Clear()' öğesini kaldırın. Nclick'teki kod, bir form yükünde olduğu gibi sadece bir kez olmak istediğiniz bir şeydir. Bir DT oluşturur ve BS ile ilişkilendirir. Her ikisi de sonsuz olarak yeniden kullanılabilir. – Plutonix

+0

Gördüğüm nclick() işlevi, onu nclick() 'i kaldırdığımdan beri şimdi çağırdığım bir işleve neden oldu: Nesne başvurusu bir nesnenin örneğine ayarlanmadı. –

+1

Nerede - hangi nesne/satır? (onun bir işlevi değil, bir yöntem). Bu kodun çalışması gerekiyor - sadece bir kez * bir form yükünde olduğu gibi * – Plutonix

cevap

0

Bu kod bloğu:

Private Sub nclick() 
    sql = "Select * from tblcustomer" 
    Using dbcon As New OleDbConnection(ACEConnStr) 
     Using cmd As New OleDbCommand(sql, dbcon) 

      dbcon.Open() 

      dtSample = New DataTable 
      dtSample.Load(cmd.ExecuteReader) 
     End Using 
    End Using 

    ' initialize BS from DT 
    bsSample = New BindingSource(dtSample, Nothing) 
    TxtCI.DataBindings.Add("Text", bsSample, "CustomerID") 
    TxtName.DataBindings.Add("Text", bsSample, "Title") 
    ChkSales.DataBindings.Add("Checked", bsSample, "SalesCustomer") 
End Sub 

... bir kez çalıştırmak gerekiyor, ama bir kez sadece. Bütün lotunu form yüküne taşıyın. Ardından:

Private Sub BtnNext_Click... 
    bsSample.MoveNext() 

    BtnNext.Enabled = (bsSample.Count - 1 > bsSample.Position) 
End Sub 

Bunun bir iletişim ya da ne bulun ise emin değilim, ama tüm müşteriler için DataTable uygulama genelindeki kullanımları sahip olabileceği unutulmamalıdır - Böyle müşteri # 30 denemeden önce varsa kontrol etme gibi silmek için

+0

Sadece sahip olduğum son sayı, satırın sonuna gitmek için düğüme bastığımda çalışıyorum ve bir kaç kez daha önce btn'ye bastıktan sonra (boşluğun sonunda olduğum gibi) boştur. Code: 'Private Sub BtnSEnd_Click (Object, e As Event, as EventArgs) Kolları BtnSEnd.Click bsSample.MoveLast() End Sub' –

+1

Sonuna geldiğinizde (' bsSample.Count - 1> bsSample.Position') düğme soruya göre devre dışıdır. Gerçekten gerekli değil: Setin sonunu MoveNext denediğinizde kötü bir şey olmaz. Onları bu şekilde etkinleştirmek isterseniz, bu kodu diğer düğmelere de eklemeniz gerekecektir.Bu şekilde sonuna geldiğinizde, MovePrev geri döndüğünde devre dışı bırakılır. – Plutonix

+0

Ahh bütün düğmeler için böyle bir satıra ihtiyacınız olacak. Anladım, eğer bazı ifadelerle birlikte orada çözdüm! Yardım için teşekkürler :) –