2013-07-18 7 views
0

Мне было интересно долгое время, как я могу установить свой SqlDataReader для заполнения столбца «pocet» в моем datagridview «dtg_ksluzby». Я думал, что мой код должен выглядеть примерно так:SqlDataReader заполняющая колонка в datagridview

SqlCommand novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz WHERE id='"+vyberradek+"'",spojeni); // I also have column "pocet" in table klisluz, vyberradek is string which selectrs id number 
      spojeni.Open(); 
      SqlDataReader precti2 = novyprikaz2.ExecuteReader(); 
      if (precti2.Read()) 
      { 
       dtg_ksluzby.Columns["pocet"]; // this part I need to improve to fill 
      } 

Не могли бы вы помочь мне улучшить код? Большое спасибо.

РЕДАКТИР trippino:

  1. В "klisluz", который находится в таблице, содержащей столбцы (ID, Akce, подраздела, текст, Počet). Мне нужно:
    1. выберите * из klisluz где Подраздел = «„+ vyberradek +“»
    2. Возьмите колонки Počet и заполнить его в dtg_ksluzby, где я могу найти текст подобен в графе «текст» в dtg_ksluzby

Надеюсь, что мое описание понятно, извините за слабый английский.

+0

вы собираетесь обновить столбец существующего datagridview с уже привязанным к данным? – Damith

ответ

1

использовать что-то вроде этого:

 for (int i = 0; i < dtg_ksluzby.Rows.Count; i++) 
     { 
      var row = dtg_ksluzby.Rows[i]; 
      using(var novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz WHERE text LIKE @t AND [email protected]", spojeni)) 
      { 
       novyprikaz2.Parameters.AddWithValue("@t", row.Cells["text"].Value.ToString()); 
       novyprikaz2.Parameters.AddWithValue("@s", vyberradek); 
       spojeni.Open(); 
       SqlDataReader precti2 = novyprikaz2.ExecuteReader(); 
       if (precti2.Read()) 
       { 
        row.Cells["pocet"].Value = precti2["pocet"]; 
       } 
      } 
     } 
+0

Ну, я бы не хотел добавлять строки, но заполнить существующий столбец, возможно ли это? Большое спасибо за ответ. –

+0

Я отредактировал свой ответ, но я не могу понять, сколько строк у вас в БД * и * в gridView –

+0

. Второй код работает нормально, но когда я заполняю несколько строк, он заполняет только то значение, которое находится сверху. , Думаю, я плохо описал свою проблему. Я загружаю dtg_ksluzby как 5 строк. И я хотел бы заполнить каждую строку своей стоимостью из «pocet». Что я должен изменить, пожалуйста? –

2

Не использовать конкатенацию для создания команд SQL, (чтобы избежать Sql Injection и синтаксического анализа проблемы)

using(SqlConnection spojeni = new SqlConnection(conString)) 
using(SqlCommand novyprikaz2 = new SqlCommand("SELECT pocet FROM klisluz " + 
               "WHERE id = @id",spojeni); 
{ 
    novyprikaz2.Parameters.AddWithValue("@id", vyberradek); 
    spojeni.Open(); 
    using(SqlDataAdapter da = new SqlDataAdapter(novyprikaz2)) 
    { 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     dtg_ksluzby.DataSource = dt; 

    } 
} 

Использовать DataAdapter для загрузки данных из базы данных и передать этот экземпляр DataAdapter в DataSource вашего DataGridView