好吧,我有一个DataGridView正在像数据包那样:
dataGridViewChartOre.AutoGenerateColumns = false;
dataGridViewChartOre.DataSource = xml.GetOreChart();
dataGridViewChartOre.DataMember = "ore";
所有列都是通过UI手动创建的。列由1个字符串组成,10位小数。最后一列是货币的地方。
现在获取在dataGridView中显示的货币很快就能解决一次,我记得xml的输入始终是一个字符串。使用这种方法:(在这个网站上找到其他位置。)
private void dataGridViewChartOre_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
string value = e.Value.ToString();
decimal d;
if (decimal.TryParse(value, out d))
{
e.Value = d;
}
}
现在,要排序的小数似乎是一个更大的问题。我已经尝试了几个建议的解决方案,但到目前为止还没有任何工作。
现在,它只按第一个数字排序所有小数,即:
8616
8225
785995
7833
78069
773403
750268
74521
738249
714541
70972
and so on
那么如何解决这个问题,如果有人可以向我解释为什么会这样做呢?
另外,在旁注中,如何更改CurrencySymbol?我想在整个程序中使用不同的符号,但是,它应该保留常规的en-US日期时间格式。
答案 0 :(得分:0)
您的DataGridView
列类型取决于基础数据的实际类型。您无法更改基础数据的类型,您在CellFormatting
事件处理程序中更改的内容只是单元格值。如果更改单元格值类型以使其类型与拥有列的类型(由基础数据确定)不匹配,则会抛出FormatException
。我猜你的代码(在CellFormatting
事件处理程序中)会在更改单元格值后添加e.FormattingApplied = true;
时抛出该异常,这实际上会影响格式化,但是你错过了它。)
你提到了SortCompare
事件,并表示没有帮助,但我认为你可能不会以正确的方式使用它。我已经尝试过这个解决方案并且有效:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
e.SortResult = Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
}
private int Compare(string a, string b)
{
return decimal.Parse(a).CompareTo(decimal.Parse(b));
}