簡體   English   中英

DataBinding一個DataGridview行的BackColor

[英]DataBinding a DataGridview rows BackColor

我有一個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不能采用XY形式的問題? 我以為我以前曾經看過/使用過這種語法,但是也許它僅適用於DataMember?

任何幫助深表感謝

我認為問題是files.DisplayColor files是一個集合,沒有屬性DisplayColor但是集合的每個項目都有。 因此,您正在嘗試綁定不存在的屬性。 進一步的綁定集合DataGridView.DataBindings允許您對控件(而不是其行)的屬性進行數據綁定。 所有行只有一個DataGridView.DefaultCellStyle.BackColor 因此,我相信您最終需要將每行的DefaultCellStyle綁定到files的coresponding項,而且我不確定是否可行。 可能是DataGridView根據需要創建和刪除行(例如,如果您執行過濾),這也會破壞數據綁定。

因此,我不確定是否可以通過數據綁定完成行着色,但是我個人對此表示懷疑。 這將需要一些真正聰明的邏輯來識別“將綁定到該行的對象數據的DisplayColor屬性綁定到該行的DefaultCellStyle.BackColor屬性”。

您可以很好地實現這種智能數據綁定。 盡管這將是一件很棒的事情,但它也將非常復雜。 作為一個簡單的解決方案,您可以僅使用RowPrepaint事件為行設置正確的顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM