#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. Ну, вы привели меня к ответу, поэтому я очень благодарен! Спасибо! 🙂