再次需要这个可怕的社区帮助。
我有一个带有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
接受这种方法的正确方法是什么? 谢谢你的帮助。
答案 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,您可能需要处理其中的任何异常。