Выберите строки в Datagridview выполнить хранимую процедуру - PullRequest
0 голосов
/ 19 декабря 2018

Не знаю, почему я ошибаюсь.

Попытка выбрать строки в сетке данных и передать их хранимой процедуре.Каждый раз, когда я выполняю следующее, передается правильное количество строк, но вместо строки 4, например, он выполняет запрос в строке 1. Или, если я выбрал 2. Как передать выбранные строки в запрос, а не простоколичество выбранных строк?

foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
    for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
    {
        SqlCommand sqlCmd = new SqlCommand("uspSelectWater", con);
        sqlCmd.CommandType = CommandType.StoredProcedure;

        sqlCmd.Parameters.AddWithValue("@CaseNumberKey", this._CaseNum);
        sqlCmd.Parameters.AddWithValue("@MasterAccount", dataGridView1.Rows[i].Cells[3].Value);
        sqlCmd.Parameters.AddWithValue("@WaterAccount", dataGridView1.Rows[i].Cells[4].Value);
        sqlCmd.Parameters.AddWithValue("@OwnerName", dataGridView1.Rows[i].Cells[5].Value);
        sqlCmd.Parameters.AddWithValue("@MailName", dataGridView1.Rows[i].Cells[6].Value);
        sqlCmd.Parameters.AddWithValue("@AcctBalance", dataGridView1.Rows[i].Cells[7].Value);

        sqlCmd.ExecuteNonQuery();
    }   
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы уже зациклили выбранные строки, поэтому внутренний цикл не требуется.

Просто используйте выбранную строку

Попробуйте:

foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{    

        SqlCommand sqlCmd = new SqlCommand("uspSelectWater", con);
        sqlCmd.CommandType = CommandType.StoredProcedure;

        sqlCmd.Parameters.AddWithValue("@CaseNumberKey", this._CaseNum);
        sqlCmd.Parameters.AddWithValue("@MasterAccount", r.Cells[3].Value);
        sqlCmd.Parameters.AddWithValue("@WaterAccount", r.Cells[4].Value);
        sqlCmd.Parameters.AddWithValue("@OwnerName", r.Cells[5].Value);
        sqlCmd.Parameters.AddWithValue("@MailName", r.Cells[6].Value);
        sqlCmd.Parameters.AddWithValue("@AcctBalance", r.Cells[7].Value);

        sqlCmd.ExecuteNonQuery();

}
0 голосов
/ 19 декабря 2018

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

int i;
i = dg.SelectedCells[0].RowIndex;
str1= dg.Rows[i].Cells[1].Value.ToString();
str2= dg.Rows[i].Cells[2].Value.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...