2014-02-26 37 views
1

再次需要来自这个awsome社区的帮助。DataGridView可能在同一列中使用不同的单元格格式?

我有一个WinForms应用程序与DataGridView显示一些数据。 特别有两列对我很重要。一个是“单位”,第二个是“价值”。单位格式中的字符串和值具有数值。我想在每个DataGridViewRow中设置值,具体取决于单元的内容。例如:如果unit是'piece',我需要Value为int(无小数位)。如果单位是'毫米',我需要将值除以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 

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

+0

可以通过设置单元格的样式。你必须为valuechanged事件处理程序添加一个方法,这会改变它。请参阅http://msdn.microsoft.com/en-us/library/1yef90x0%28v=vs.110%29.aspx “DefaultCellStyle.Format”是您需要的(名称中的“默认”可能会被误导) – Tarec

+0

试试这个链接以及http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting(v=vs.110).aspx –

回答

2

您将需要处理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,你可能需要处理在没有任何例外。

+0

是否有可能得到一个简单的例子? :)尚未使用该事件,所以我不知道正确的语法...将检查评论中提供的链接,但仍会申请一些代码片段。 – user1080533

+0

希望帮助 – Simon

+0

只是一个简单的问题......什么是“数据源”?我用作数据源的数据表? – user1080533

相关问题