2015-09-17 5 views
2

В моей веб-странице есть только выпадающий список с идентификатором ученика и сеткой с изображениями учеников. Если я выбираю ученика, Grid View должен отображать все изображения выбранного ученика. Проблема заключается в том, что когда я выбираю ученика, мой сетчатый вид пропускает первые два значения. Я имею в виду, если есть 6 изображений, сетка показывает только 4 изображения. Вот мой код:mysql select query skipping значения первой строки

private void BindGrid() 
{ 
    MySqlConnection con = new MySqlConnection(constr); 
    MySqlCommand cmd = new MySqlCommand("SELECT * FROM images where Image_ID in (" + String.Join(",", getImage_ID()) + ")", con); 
    MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    gvImages.DataSource = dt; 
    gvImages.DataBind(); 
} 
private List<int> getImage_ID() 
{ 
    List<int> i = new List<int>(); 
    MySqlConnection con = new MySqlConnection(constr); 
    con.Open(); 
    string query = "Select Come_Image_ID1, Leave_Image_ID from register where Students_ID='" + getStudents_ID() + "' AND Come_Image_ID IS NOT NULL AND Leave_Image_ID IS NOT NULL"; 
    MySqlCommand cmd = new MySqlCommand(query); 
    cmd.Connection = con; 
    MySqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     foreach (DbDataRecord s in reader) 
     { 
      i.Add(s.GetInt32(0)); 
      i.Add(s.GetInt32(1)); 
     } 
    } 
    reader.Close(); 
    return i; 
} 

Что является лучшей практикой для кодирования этого вопроса?

+0

Я не использую Java, поэтому это просто предположение: избавиться от цикла while. «Foreach» уже перебирает все строки. 'reader.Read()' извлекает первую строку, поэтому цикл 'foreach' начинается со следующей строки. – Barmar

+0

Это объясняет, почему он пропускает первый ряд, я не уверен, почему он пропускает второй. – Barmar

ответ

0

Вы смешиваете способы чтения данных. Либо Вы while цикл:

while (reader.Read()) 
{ 
    i.Add(reader.GetInt32(0)); 
    i.Add(reader.GetInt32(1)); 
} 

Или foreach петля:

foreach (DbDataRecord s in reader) 
{ 
    i.Add(s.GetInt32(0)); 
    i.Add(s.GetInt32(1)); 
} 

Но не оба. И while, и foreach потребляют записи из курсора, а когда вы их смешиваете, вы пропускаете записи, которые потребляет цикл while.