5

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

是否可以?

4

2 回答 2

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

于 2012-05-11T13:03:48.523 回答
0

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

于 2012-05-11T12:59:00.840 回答