遇到个类型转换问题,请教各位

lywwwlsq 2012-08-16 05:44:12
DataTable dt = new DataTable();

dt.Columns.Add("大于200人数", System.Type.GetType("System.Int16"));
dt.Columns.Add("总人数", System.Type.GetType("System.Int16"));
dt.Columns.Add("比例", System.Type.GetType("System.String"));

前面两列数据已经成功添加进去了
最后一列如果用 dt.Columns["比例"].Expression = "大于200人数/总人数";

dataGridView1.DataSource = dt; 正常
--------------------------------------------------------------------------------------------------------

但由于小数位数太多,希望用显示2位小数,如果用
dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString();
则仍然显示一长串小数,但程序能调通
--------------------------------------------------------------------------------------------------------
如果用dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString("0.00");
则调不通,提示错误:
1 与“string.ToString(System.IFormatProvider)”最匹配的重载方法具有一些无效参数
2 参数 1: 无法从“string”转换为“System.IFormatProvider”




望各位指点
...全文
367 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
窗户纸 2012-08-17
  • 打赏
  • 举报
回复
datagridview.autogenerateColumns=false;

手工建3个列,每列手工设绑定,如
datagridview.columns["比例"].datapropertyname="比例".
在column上设属性,
shizhu820228 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

把你的返回值转换成数字

然后ToString("F2");
[/Quote]

+
  • 打赏
  • 举报
回复
double 值 = 大于200人数/总人数;
值.ToString("F2");
lywwwlsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数
[/Quote]

在设计界面找到了DefaultCellStyle属性,点开后设置其Format属性为N2
结果前两列人数变成了2位小数了,如3.00
最后一列还是长小数

如果只针对一列设置?另外此法似乎无效
lywwwlsq 2012-08-17
  • 打赏
  • 举报
回复
我是LZ,很多人说先转成Double,我试过了

dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString();
能通,但无效
-----------------------------------------------------------------------
dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString("0.00");
不通
1 与“string.ToString(System.IFormatProvider)”最匹配的重载方法具有一些无效参数
2 参数 1: 无法从“string”转换为“System.IFormatProvider”
-----------------------------------------------------------------------
dt.Columns["比例"].Expression =(Double.Parse("大于200人数/总人数")).ToString();
dt.Columns["比例"].Expression =(Convert.ToDouble("大于200人数/总人数")).ToString();
不提示错误,但调试时出错
“System.FormatException”类型的未经处理的异常出现在 mscorlib.dll 中。
其他信息: 输入字符串的格式不正确。

是否有其他转换方式?请教一下
lywwwlsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数
[/Quote]

请问具体该怎么弄,我对datagridview不太了解,用的方法是最后绑定datatable
dataGridView1.DataSource = dt;
而且其他列有string格式的,如何单独设置一列的格式,还望具体教我一下
wlcsdf 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数
[/Quote]
正确。或者转成数字设置格式,再转成strign.
窗户纸 2012-08-17
  • 打赏
  • 举报
回复
.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数
lywwwlsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 11 楼 的回复:
引用 7 楼 的回复:

.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->forma……
[/Quote]
似乎没用,我昨天发帖询问之前就已经试了,并且我觉得用string应该更好,毕竟最后需要.tostring("P")方法
窗户纸 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 7 楼 的回复:

.Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数


在设……
[/Quote]
你要把datatable的列定义调一下:
dt.Columns.Add("比例", System.Type.GetType("System.String"));

改为:
dt.Columns.Add("比例", System.Type.GetType("System.int16"));
lywwwlsq 2012-08-17
  • 打赏
  • 举报
回复
解决了,诸位的方法似乎都不管用

dt.Columns["比例"].Expression 这样赋值后,似乎此列类型都不好转换了……

最后用的方法是
for (i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i][3] = (Double.Parse(dt.Rows[i][1].ToString()) / Double.Parse(dt.Rows[i][2].ToString())).ToString("P");
}
  • 打赏
  • 举报
回复
先转为double,在tostring("f2");
mingcsharp 2012-08-16
  • 打赏
  • 举报
回复
对呀,先取数,再设置不就成了
stiff_neck 2012-08-16
  • 打赏
  • 举报
回复
分两步,先设置位数,再tostring()
  • 打赏
  • 举报
回复
把你的返回值转换成数字

然后ToString("F2");
zhanglong19891129 2012-08-16
  • 打赏
  • 举报
回复
先把你的值用 double类型存起来..然后在这样调用 double.tostring("0.00");
窗户纸 2012-08-16
  • 打赏
  • 举报
回复
.Expression只是表达式而已,不是实际计算的公式,你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧