Получить данные из БД в datagridview на основе значений datagrid С#

У меня есть вопрос, и я, кажется, не понимаю его правильно в этом... То, что я пытался сделать, это ввести значение (id) в ячейку datagridview, нажать клавишу ввода и заполнить соседние ячейки данными из БД (SQL), который соответствует идентификатору, который я ввел в первую ячейку. Вопросы:

  1. Как получить событие нажатия клавиши в datagridview?

  2. Как мне получить значение из этой конкретной ячейки, допустим целое число?

  3. Как сложить строки из таблицы данных, не удаляя первую строку в datagridview? Есть ли для него метод обновления?

Извините, если это основные вопросы, но я, кажется, не нашел ответа. Спасибо!

Изменить: вот код, который я пытался... что я сделал с этим, так это то, что когда я нажимаю ввод, я получаю набор новых пустых столбцов в сетке данных помимо столбцов, которые я уже создал

private void dataGridView_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Enter)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                DataGridViewCell cell = row.Cells[0];
                if (cell.Value == null || cell.Value.Equals("") || cell.ColumnIndex == 0)
                {
                    dataGridView1.CurrentRow.cell[0].FormattedValue as int;
                    int idArticle = Convert.ToInt32(row.Cells[0].Value);
                    //int idArticle = Convert.ToInt32(dataGridView1.SelectedCells[0].Value);
                    dataGridView1.AutoGenerateColumns = true;
                    string constring = @"Data Source=DAN;Initial Catalog=administration;Integrated Security=True ";
                    using (SqlConnection con = new SqlConnection(constring))
                    {
                        using (SqlCommand cmd = new SqlCommand("SELECT id_article, article, quantity, precio FROM articlesSG WHERE id_article=@id_article", con))
                        {
                            cmd.Parameters.AddWithValue("id_article", idArticle);
                            cmd.CommandType = CommandType.Text;
                            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                            {
                                using (DataTable dt = new DataTable())
                                {
                                    sda.Fill(dt);
                                    dataGridView1.DataSource = dt;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

person Dan    schedule 16.02.2015    source источник
comment
@Grant Winney Спасибо, чувак! Да, я думаю, что я правильно понял с событием KeyDown... то, что я, кажется, не понимаю правильно, это получение данных из БД в представление данных, что само по себе не очень сложно, но я просто не могу Сделай это, я думаю, я пойду прогуляюсь, чтобы немного очистить свой разум.   -  person Dan    schedule 17.02.2015
comment
@ Грант Винни Хорошо, конечно, я не вставлял это, потому что я просто пробовал что-то наугад, и это может не иметь особого смысла ... но я попробую, если у вас, ребята, есть немного времени, большое спасибо для твоего времени человек!   -  person Dan    schedule 17.02.2015
comment
@ Грант Винни, да, я так и думал! Рад, что я на правильном пути. Большое спасибо за совет! отпишусь позже, если получится   -  person Dan    schedule 17.02.2015


Ответы (1)


Чтобы захватить ключи, попробуйте следующее:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  var tb =(DataGridViewTextBoxEditingControl)e.Control;
  tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);

  e.Control.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
}

private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
}

Чтобы получить текущее значение:

dataGridView1.CurrentRow.Cell[indexorname].FormattedValue as int

Для добавления строк используйте DataTable.Merge. :

person Sievajet    schedule 16.02.2015