Привязка данных к строкам DataGridview BackColor - PullRequest
1 голос
/ 23 апреля 2009

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

Однако я хочу, чтобы BackColor строк также был привязан к данным, и пока мои попытки приводят к ошибкам.

Это моя последняя попытка:

dataGridFileTransfer.RowHeadersVisible = false;
dataGridFileTransfer.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridFileTransfer.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridFileTransfer.MultiSelect = false;
dataGridFileTransfer.ReadOnly = true;
var files = GetReceivedFiles(false).Union(FileDetails.Select(FileStatus.FailedVerification)).ToList();
dataGridFileTransfer.AutoGenerateColumns = false;

string[] displayHeaders = new string[] { COL_NAME, COL_TYPE, COL_CREATED, COL_SIZE, COL_STATUS };
string[] displayProps = new string[] { "Filename", "FileTypeDisplayName", "Created", "Size", "FileStatus" };

for (int i = 0; i < displayHeaders.Length; i++)
{
  DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
  col.HeaderText = displayHeaders[i];
  col.DataPropertyName = displayProps[i];

  if (displayHeaders[i] == COL_CREATED)
    col.DefaultCellStyle.Format = Constants.DDMMYYYHHMMSS;

  dataGridFileTransfer.Columns.Add(col);
}

Binding bi = new Binding("DefaultCellStyle.BackColor", files, "DisplayColor");
dataGridFileTransfer.DataBindings.Add(bi);

dataGridFileTransfer.DataSource = files;

Что генерирует ArguementException:

"Невозможно привязать к свойству "DefaultCellStyle.BackColor" на контроль цели. Имя параметра: PropertyName "

Это неверное значение PropertyName или я должен связываться с объектом, отличным от DataGridView? (то есть столбец?) Или проблема в том, что PropertyName не может быть в форме X.Y? Я думал, что видел / использовал этот синтаксис раньше, но, возможно, он работает только для DataMember?

Любая помощь очень ценится

1 Ответ

1 голос
/ 23 апреля 2009

Я думаю, что проблема files.DisplayColor. files - это коллекция, у которой нет свойства DisplayColor, но у каждого элемента коллекции есть. Итак, вы пытаетесь связать несуществующую собственность. Дальнейшая привязка коллекции DataGridView.DataBindings позволяет привязывать данные к свойствам элемента управления, а не его строк. Существует только один DataGridView.DefaultCellStyle.BackColor для всех рядов. Поэтому я считаю, что в конечном итоге вам нужно связать DefaultCellStyle каждой строки с базовым элементом из files, и я не уверен, возможно ли это. Возможно, DataGridView создает и удаляет строки по мере необходимости, например, если вы выполняете фильтрацию, и это также разрушает привязку данных.

Итак, я не уверен, можно ли раскрасить строки с помощью привязки данных, но я лично в этом сомневаюсь. Это потребовало бы некоторой действительно умной логики, распознающей «привязать свойство DisplayColor данных объекта, привязанных к этой строке, к свойству DefaultCellStyle.BackColor этой строки».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...