Доступ к ячейкам в gridview

#c# #sql #winforms #gridview #datagridview

#c# #sql #winforms #gridview #datagridview

Вопрос:

На прошлой неделе я начал пытаться использовать Winforms для автоматизации некоторых отчетов. Мне не нравится переход (каким бы простым он ни был для некоторых из вас)!

В настоящее время я отображаю данные из представления SQL, которое я создал с помощью Oracle SQL Developer. Я получил доступ к данным, используя задачи DataGridView, чтобы выбрать таблицу и отобразить ее (это казалось самым простым методом).

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

Чтобы получить доступ к данным и выделить строки, я надеялся сделать что-то вроде этого

 protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int theValue = Convert.ToInt32(e.Row.Cells[0].Text);

            if (theValue>0)
                e.Row.Cells[0].BackColor = System.Drawing.Color.Red
    }
}
  

Это не работает, потому что событие не запускается. Я думаю, что я должен привязать данные к своему gridview, но я загрузил все данные через конструктор. В этом проблема? Я понятия не имею, как это закодировать самостоятельно, я пробовал раньше, но это вызвало колебание.

Кроме того, когда я пытаюсь изменить SQL-запрос к базе данных через конструктор, он не работает. Я думаю, что с такой скоростью я сойду с ума!

Ответ №1:

Вам нужно использовать событие форматирования ячеек в DataGridView следующим образом

 private void MyGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if ((int)MyGridView.Rows[e.RowIndex].Cells[0].Value > 30)
            {
                e.CellStyle.BackColor = System.Drawing.Color.Red;
                e.CellStyle.ForeColor = System.Drawing.Color.White;
            }
        }
  

Комментарии:

1. Спасибо за ваш ответ. int Приведение MyGridView не работает, поэтому я изменил эту часть на эту: string val = DataGridViewPhantom_1.Rows[e.RowIndex].Cells[i].Value.ToString(); int numVal = Convert.ToInt32(val); if (numVal== 0) { //do something }

2. Ну, вы привели меня к ответу, поэтому я очень благодарен! Спасибо! 🙂