2013-11-19 3 views
0

Так я этот код, написанный ...vb.net GridView не заполняя должным образом

Public Class PrikazUgovora 
    Private myConn As SqlConnection 
    Private myCmd As SqlCommand 
    Private Sub btnPretraziUgo_Click(sender As System.Object, e As System.EventArgs) Handles btnPretraziUgo.Click 
     Dim tblKorisnik As New DataTable 
     myConn = New SqlConnection(Pom.GetConnString()) 
     myCmd = myConn.CreateCommand 

     myCmd.Parameters.AddWithValue("KliUgoPick", DateTimeUgovora.Value) 
     myCmd.CommandText = "select * from klijent" 
     Try 
      myConn.Open() 
      Dim reader As SqlClient.SqlDataReader = myCmd.ExecuteReader() 

      'test to confirm data received 
      Dim dt = New DataTable() 
      reader.Read() 

      dt.Load(reader) 
      DataGridViewUgo.DataSource = dt 
      DataGridViewUgo.AutoGenerateColumns = True 
      DataGridViewUgo.Refresh() 

     Catch ex As Exception 
      MessageBox.Show(ex.Message, "Error") 

     Finally 
      If myConn.State = ConnectionState.Open Then 
       myConn.Close() 
      End If 
     End Try 


    End Sub 


End Class 

И проблема в том, что у меня есть пять записей, но по какой-то странной причине мой GridView заполняет только четыре, в результате чего первый из таблицы не показал один с ID = 1

То же самое происходит, если я пишу выбрать * из klijnet где kli_id = 1 ...

Забавно, что в SQL этот запрос работает как шарм ...

+3

Have вы поставите точку останова после 'dt.Load()' линии и используя отладчик, чтобы увидеть, что 'dt.Rows.Count' равно? –

+0

Почему вы используете datareader ... Я бы поискал SQL Data Adapter – logixologist

ответ

0

Наиболее вероятной причиной является то, что вы делаете reader.Read(), который читает первую запись. Затем вы пытаетесь заполнить datatable .. читатель уже прочитал 1-й. Я думаю, вы можете запутать некоторые объекты здесь.

Обновить его к чему-то вроде этого:

Public Class PrikazUgovora 
    Private myConn As SqlConnection 
    Private myCmd As SqlCommand 
    Private Sub btnPretraziUgo_Click(sender As System.Object, e As System.EventArgs) Handles btnPretraziUgo.Click 

     Dim tblKorisnik As New DataTable 
     myConn = New SqlConnection(Pom.GetConnString()) 
     myCmd = myConn.CreateCommand 

     myCmd.Parameters.AddWithValue("KliUgoPick", DateTimeUgovora.Value) 
     myCmd.CommandText = "select * from klijent" 
     Try 
      myConn.Open() 
      Dim adapter As SqlClient.SqlDataAdapter 
      adapter.SelectCommand = New SqlCommand(myCmd.CommandText , connection) 
      adapter.Fill(tblKorisnik) 
      DataGridViewUgo.DataSource = tblKorisnik 
      DataGridViewUgo.AutoGenerateColumns = True 
      Catch ex As Exception 
      MessageBox.Show(ex.Message, "Error") 

     Finally 
      If myConn.State = ConnectionState.Open Then 
       myConn.Close() 
      End If 
     End Try 


    End Sub 


End Class 

Смотрите эту информацию на адаптер SQL данных: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

+0

Спасибо, немного отличается от кода, но адаптер решает его :) cheers mate –

+0

Отлично! Я должен был сделать несколько предположений о коде. – logixologist

Смежные вопросы