DataBinding DataGridview行BackColor

时间:2009-04-23 12:54:02

标签: c# winforms data-binding datagridview

我有一个使用数据绑定的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 个答案:

答案 0 :(得分:1)

我认为问题是files.DisplayColorfiles是一个集合,没有属性DisplayColor,但集合中的每个项目都有。所以你试图绑定一个不存在的属性。进一步的绑定集合DataGridView.DataBindings允许您对控件的数据绑定属性,而不是其行的属性。所有行只有一个DataGridView.DefaultCellStyle.BackColor。所以我相信你最终需要将每行的DefaultCellStyle绑定到files的相应项目,我不确定这是否可行。可能是DataGridView根据需要创建和删除行 - 例如,如果执行过滤 - 这也会破坏数据绑定。

所以,我不确定是否可以使用数据绑定进行行着色,但我个人对此表示怀疑。这需要一些非常智能的逻辑识别'将绑定到此行的对象数据的属性DisplayColor绑定到此行的属性DefaultCellStyle.BackColor。'

你可以勉强实现这种智能数据绑定。虽然这将是一件好事,但它也将非常复杂。作为一个简单的解决方案,您可以使用RowPrepaint事件为行设置正确的颜色。