Я хотел бы изменить цвет определенной строки в моем представлении данных. Строка должна быть изменена на красный, если значение columncell 7 меньше значения в columncell 10. Есть предложения о том, как этого добиться?
143
Я хотел бы изменить цвет определенной строки в моем представлении данных. Строка должна быть изменена на красный, если значение columncell 7 меньше значения в columncell 10. Есть предложения о том, как этого добиться?
Вам нужно перебрать строки в сетке данных, а затем сравнить значения столбцов 7 и 10 в каждой строке.
Попробуй это:
foreach (DataGridViewRow row in vendorsDataGridView.Rows)
if (Convert.ToInt32(row.Cells[7].Value) < Convert.ToInt32(row.Cells[10].Value))
{
row.DefaultCellStyle.BackColor = Color.Red;
}
Я только что исследовал эту проблему (так что я знаю, что этот вопрос был опубликован почти 3 года назад, но, возможно, он кому-то поможет ...), но, похоже, что лучший вариант - разместить код внутри
RowPrePaint
события, чтобы вы не могли придется проходить через все строки, только те, которые окрашены (поэтому он будет работать намного лучше при большом количестве данных:Прикрепить к событию
Код события
источник
Вы ищете
CellFormatting
событие.Вот пример.
источник
У меня также были проблемы с изменением цвета текста - я никогда не видел изменения цвета.
Пока я не добавил код, чтобы изменить цвет текста на событие
DataBindingsComplete
дляDataGridView
. После этого это сработало.Я надеюсь, что это поможет людям, которые сталкиваются с той же проблемой.
источник
Что-то вроде следующего ... при условии, что значения в ячейках являются целыми числами.
не проверено, поэтому извиняюсь за любую ошибку.
Если вы знаете конкретную строку, вы можете пропустить итерацию:
источник
Некоторые люди любят использовать
Paint
,CellPainting
илиCellFormatting
события, но обратите внимание , что изменение стиля в этих событиях вызывают рекурсивные вызовы. Если вы используетеDataBindingComplete
его, он будет выполнен только один раз. Аргументом дляCellFormatting
является то, что он вызывается только для видимых ячеек, поэтому вам не нужно форматировать невидимые ячейки, но вы форматируете их несколько раз.источник
Вы можете изменить
Backcolor
строку за строкой , используя ваш condition.and вызов этой функции после примененияDatasource
вDatagridView
.Вот функция для этого. Просто скопируйте это и поместите после
Databind
источник
источник
Это мое решение изменить цвет на dataGridView с bindingDataSource:
источник
Если вы привязываетесь к (коллекции) конкретных объектов, вы можете получить этот конкретный объект через свойство DataBoundItem строки. (Чтобы избежать проверки наличия магических строк в ячейке и использования «реальных» свойств объекта)
Пример скелета ниже:
DTO / ПОКО
Привязка к сетке данных
затем обработчик событий и получение конкретного объекта (вместо DataGridRow и / или ячеек)
источник
Я обычно хотел бы использовать событие GridView.RowDataBound Event для этого.
источник
Работает на Visual Studio 2010. (Я пробовал, и это работает!) Он будет рисовать весь ваш ряд.
datagridview
.CellClick
событие и поместите в него следующую строку кода.источник
Вы не упомянули, как изменяется значение. Я использовал аналогичные функции, когда пользователь вводит значение. т.е. вход и выход из режима редактирования.
Использование события CellEndEdit для datagridview.
Вы можете добавить логику для очистки уведомлений об ошибках аналогичным образом.
если в вашем случае, если данные загружаются программно, событие CellLeave можно использовать с тем же кодом.
источник
С помощью этого кода вы изменяете только задний цвет строк, где значение столбца равно нулю, а цвет остальных строк остается цветом по умолчанию.
источник
Просто примечание об установке
DefaultCellStyle.BackColor
... вы не можете установить для него любое прозрачное значение, кромеColor.Empty
. Это значение по умолчанию. Это ложно подразумевает (для меня, во всяком случае), что прозрачные цвета в порядке. Они не. Каждая строка, которую я установил в прозрачный цвет, просто рисует цвет выделенных строк.Я потратил слишком много времени, стуча головой об стену из-за этой проблемы.
источник
Я приземлился здесь в поисках решения для случая, когда я не использую привязку данных. Ничто не сработало для меня, но я получил это в конце концов с:
источник
Если вы являетесь вторым самым глупым разработчиком на планете (а я самым глупым), кажется, что все вышеперечисленные решения работают: CellFormatting, DataSourceChanged и RowPrePaint. Я предпочитаю RowPrePaint.
Я боролся с этим (слишком долго), потому что мне нужно было переопределить мои SelectionBackColor и SelectionForeColor вместо BackColor и ForeColor, когда я менял выбранную строку.
источник
источник