【问题标题】:DataGridView Different cell formatting in same column possible?DataGridView 可能在同一列中使用不同的单元格格式?
【发布时间】:2014-02-26 14:16:17
【问题描述】:

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

我有一个带有 DataGridView 的 WinForms 应用程序来显示一些数据。 有两个专栏对我很重要。一是“单位”,二是“价值”。 Unit 在格式中有字符串,而 Value 有数值。我想根据单位是什么来格式化每个 DataGridViewRow 中的值。例如:如果单位是“件”,我需要值是整数(没有小数位)。如果单位是“毫米”,我需要将值除以 1000 并显示两 (2) 个小数位,并将单位更改为“米”...希望您理解。还有一些图形解释:

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

解决这个问题的正确方法是什么? 感谢您的帮助。

【问题讨论】:

标签: c# winforms datagridview formatting


【解决方案1】:

您需要处理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,您可能需要处理其中的任何异常。

【讨论】:

  • 能否举个简单的例子? :) 还没有使用该事件,所以我不知道正确的语法...将检查 cmets 中提供的链接,但仍会应用一些代码 sn-ps。
  • 只是一个简单的问题...什么是“数据源”?我用作数据源的数据表?
  • 正确。您的网格绑定到的 DataTable 或 List
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 2014-11-20
  • 2011-01-29
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多