DataGridView中的计算列绑定到一个对象

时间:2012-05-11 12:46:26

标签: c# winforms datagridview datagridviewcolumn

我的UI由绑定到业务对象列表的datagridview(AutoCreateColumns= false)组成。让我们假设我的对象包含2列 - 价格和数量 - 我想在我的网格中添加一个新列 - 总计 - 将计算哪个值 - 价格*数量,但是没有修改我的Business对象。

有可能吗?

2 个答案:

答案 0 :(得分:5)

您可以通过编程方式将未绑定的列添加到网格中,然后使用事件填充列的单元格。

有两种主要方法可以填充未绑定列的内容:处理 RowsAdded 事件或处理 CellFormatting 事件。如果网格可编辑,则还需要处理 CellValueChanged 。 CellFormatting事件还可用于将值在单元格中呈现时转换为与实际存储在网格后面的数据中的值不同的值。

代码示例 -

private void OnCellFormatting(object sender,
   DataGridViewCellFormattingEventArgs e)
{

    if (e.ColumnIndex == grid.Columns["Unbound"].Index)
    {
       e.FormattingApplied = true;
       DataGridViewRow row = grid.Rows[e.RowIndex];
       e.Value = string.Format("{0} : {1}",
          row.Cells["SomeColumn1"].Value,
          row.Cells["SomeColumn2"].Value);
    }
}

private void OnRowsAdded(object sender,
   DataGridViewRowsAddedEventArgs e)
{

   for (int i = 0; i < e.RowCount; i++)
   {
      DataGridViewRow row = grid.Rows[e.RowIndex + i];
      row.Cells["Unbound"].Value = string.Format("{0} : {1}",
         row.Cells["SomeColumn1"].Value,
         row.Cells["SomeColumn2"].Value);
    }
}

更详细 - http://www.informit.com/articles/article.aspx?p=446453&seqNum=5

答案 1 :(得分:0)

不,不是没有编辑你的对象。