C# DataGridView中绑定到对象的计算列

C# DataGridView中绑定到对象的计算列,c#,winforms,datagridview,datagridviewcolumn,C#,Winforms,Datagridview,Datagridviewcolumn,我的UI由绑定到我的业务对象列表的datagridview(AutoCreateColumns=false)组成。假设我的对象包含两列-价格和数量-我想在我的网格中添加一个新列-合计-将计算哪个值-价格*数量,但不修改我的业务对象 有可能吗?没有,不编辑对象就不行。有 可以通过编程方式将未绑定的列添加到网格中,并使用事件填充列的单元格 填充未绑定列内容的主要方法有两种:处理行添加的事件或处理单元格格式设置事件。如果网格是可编辑的则也需要处理CellValueChanged。CellFormatt

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


有可能吗?

没有,不编辑对象就不行。

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

填充未绑定列内容的主要方法有两种:处理行添加的事件或处理单元格格式设置事件。如果网格是可编辑的则也需要处理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);
    }
}
private void OnCellFormatting(对象发送方、,
DataGridViewCellFormattingEventArgs(e)
{
if(e.ColumnIndex==grid.Columns[“Unbound”].Index)
{
e、 FormattingApplied=true;
DataGridViewRow行=grid.Rows[e.RowIndex];
e、 Value=string.Format(“{0}:{1}”,
行单元格[“SomeColumn1”]。值,
行单元格[“SomeColumn2”].Value);
}
}
私有void OnRowsAdded(对象发送方,
DataGridViewRowsAddedEventArgs(e)
{
for(int i=0;i

更详细地说-

如果你是说是否可以通过网格编辑数据-不。谢谢,这种方法似乎非常接近我的需要。甚至数据刷新也可以工作。非常感谢。请稍微提及DataGridViewCellFormattingEventArgs参数的值字段应仅分配字符串值OK。。隐马尔可夫模型。。当它是其他东西时,单元格是空白的吗?它没有显示对象的toString()表示形式吗?没有,只足以获取需要显示的字符串表示形式。