DataGridView可能在同一列中使用不同的单元格格式?

时间:2014-02-26 14:16:17

标签: c# winforms datagridview formatting

再次需要这个可怕的社区帮助。

我有一个带有DataGridView的WinForms应用程序来显示一些数据。 特别是两列对我来说很重要。一个是“单位”,第二个是“价值”。 Unit具有格式内的字符串,Value具有数值。我想根据Unit是什么来格式化每个DataGridViewRow中的Value。例如:如果unit是'piece',我需要Value为int(无小数位)。如果单位是'mm',我需要将值除以1000并显示两(2)个小数位并将单位更改为'm'...希望您理解。还有一些图解:

Unit   Value    ----> Wanted display format ----> Unit   Value
piece  100,00                                     piece   100
mm     10000,00                                   m       10,00
g      100000,00                                  kg      100,00

接受这种方法的正确方法是什么? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

您需要处理CellFormatting()事件。在这里,您可以访问当前的行和列。

在这种情况下,您可以访问DataGridViewCellFormattingEventArgs类型中的以下属性:

Public property CellStyle
Public property ColumnIndex
Public property DesiredType
Public property FormattingApplied   
Public property RowIndex    
Public property Value   

因此,您可以使用RowIndex属性在datasource中查找值,以获取条件格式的其他列值。

我目前还没有得到VS的方便,但有点像:

private void OnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
  if (e.ColumnIndex == ValueColIndex)
  {
    string unit = datasource.Rows[e.RowIndex][ValueColIndex].ToString();
    switch(unit)
    {
      case "piece": e.Value = Convert.ToInt32(e.Value).ToString();
       e.FormattingApplied = true;
       break;
      case "mm": e.Value = string.Format("{0:00}", Convert.ToDouble(e.Value) / 1000);
       e.FormattingApplied = true;
       break;
      //etc
    }
  }
}

PS,您可能需要处理其中的任何异常。