V_Rec_SalesOrderInfo[] dg = (V_Rec_SalesOrderInfo[])dgRecord.DataSource; for (int i = 0; i < dg.Count(); i++) { //if (dg[i].IsSales.ToString() == "True") //{ // dg[i].IsSales = "是"; //} //else //{ //} dg[i].IncludeTaxTotle = Convert.ToDecimal(dg[i].IncludeTaxTotle); } DataGridTableStyle ts = new DataGridTableStyle(); ts.MappingName = dg.GetType().Name; DataGridColumnStyle includeTaxTotle = new DataGridTextBoxColumn(); includeTaxTotle.MappingName = "IncludeTaxTotle"; includeTaxTotle.HeaderText = "价格"; includeTaxTotle.Width = 50; includeTaxTotle.NullText = ""; ts.GridColumnStyles.Add(includeTaxTotle); DataGridColumnStyle isSales = new DataGridTextBoxColumn(); isSales.MappingName = "IsSales"; isSales.HeaderText = "是否销售"; isSales.Width = 50; isSales.NullText = ""; isSales.GetType(); ts.GridColumnStyles.Add(isSales); dgRecord.TableStyles.Add(ts);
因为isSales是bool型的,可是我想显示 “是” 或 “否” 怎么办,还有 另一个列我想显示小数点后两位,现在是后四位,怎么办?
你可以在实体类中加一个临时列来显示文字
Math.Round(0.333333,2); //按照四舍五入的国际标准
double dbdata=0.335333;
string str1=String.Format("{0:F}",dbdata);//默认为保留两位
不行,不能改实体类,实体类这块是自动生成的,给你看一个实体类上边的注释:
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:2.0.50727.3643
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
这块是wince客户端的
string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString());
@淘@淘:
dg是在什么地方 被添加到控件中的
@芒果の冰: 就是整个页面就一个控件GridView
@芒果の冰: 大侠是这样写吗?不对啊
dg[i].IncludeTaxTotle = Convert.ToDecimal(String.Format("{0:N2}", dg[i].IncludeTaxTotle.ToString()));
@淘@淘: 数据源呢 你dg不是数据源嘛 数据源不需要扔给控件嘛 那你是怎么绑定的呢
@芒果の冰: 价格还是显示的:470.0000
@芒果の冰: 这样绑定的数据源啊
DataGridTableStyle ts = new DataGridTableStyle();
ts.MappingName = dg.GetType().Name;
这个是我看我们这的这么写的,具体什么意思,不太明白
@淘@淘: String.Format("{0:F}", Convert.ToDouble("4500.000000"))
@芒果の冰: 你这是啥呀 不明白,4500.00000 这块应该是个动态的数啊 再说 我的IncludeTaxTotle 这个是 Decimal这个类型的,不是String类型的,你要我怎么转
@淘@淘: 你自己再建一个类继承自数据源那个实体 并添加一些你自定义属性 可不可以?
@淘@淘: String.Format("{0:F}", Convert.ToDecimal("4500.000000"))
@芒果の冰: 想过再建一个类,可是就没有简单的方法吗 就用那个类,你的String.Format("{0:F}", Convert.ToDecimal("4500.000000"))这句话我还是不明白
@淘@淘: dg[i].IncludeTaxTotle =decimal.Round(dg[i].IncludeTaxTotle,2);
@芒果の冰: 没有你这个方法啊,“具有一些无效的参数”,我用的是2008
@淘@淘: dg[i].IncludeTaxTotle =Math.Round(dg[i].IncludeTaxTotle,2)
@芒果の冰: 不行,还是具有无效参数
@淘@淘: 不可能的 这个方法 .net framework 1.1就有了
http://msdn.microsoft.com/zh-cn/library/6be1edhb(v=vs.80).aspx
@淘@淘:
重写DataGridTextBoxColumn来实现
public class MyForm : DataGridTextBoxColumn { protected override object GetColumnValueAtRow(CurrencyManager source, int rowNum) { object v = base.GetColumnValueAtRow(source, rowNum); return (v.ToString() == "True") ? "是" : "否"; } }
@芒果の冰:
DataGridBoolColumn isSales = new DataGridBoolColumn(); isSales.MappingName = "IsSales"; isSales.HeaderText = "是否销售"; isSales.Width = 50; isSales.NullText = ""; isSales.GetType(); isSales.TrueValue = "是"; isSales.FalseValue = "否";
@淘@淘:
@淘@淘: 你这行代码写了这么多等号。。
提示很明显 存在此方法 你传入的参数类型不对 你的
dg[i].IncludeTaxTotle 不是 decimal类型的
@芒果の冰:
@芒果の冰:
dg[i].IncludeTaxTotle 不是 decimal类型的,那是什么类型的
@淘@淘: 鼠标放上会有提示
@芒果の冰: decimal? 这个类型的 带个问号
@淘@淘:
@淘@淘: 从图片上看 你把鼠标放到了 i 的上面 他显示 局部变量 int i
如果是 decimal? 那么你就要
dg[i].IncludeTaxTotle =Math.Round((decimal)dg[i].IncludeTaxTotle,2)
@芒果の冰:
@淘@淘: 重写DataGridTextBoxColumn试试 上面给出了重写方法
@芒果の冰:
@淘@淘:
你那个功能太陈旧了 好多都没有啊
你写上
protected override object 空格 你看看它提示可以重写哪个方法
@芒果の冰: 我写了一个类继承自那个类,可是运行报错:ThreadAbortException,是怎么回事啊
@淘@淘: 数组没初始化啊
V_Rec_SalesOrderInfo2[] dg2 = new V_Rec_SalesOrderInfo2[dg.Length];
@芒果の冰: 写上了可还是不行啊 我是不是打扰你了呀 要是你忙的话就算了我自己弄吧
@淘@淘: 代码应该没问题 调试下看看哪行报错
@芒果の冰: 不知道为什么就是在赋值的时候就报错了
dg2[i].UserCode = dg[i].UserCode;
@淘@淘: 肯定是数组没初始化
@芒果の冰: 可是我照你说的这样写了啊
V_Rec_SalesOrderInfo2[] dg2 = new V_Rec_SalesOrderInfo2[dg.Length];
@芒果の冰: 好像是dg2有问题一样,但我不知道是哪的问题
@淘@淘: 这个问题解决了,加了句dg2[i] = new V_Rec_SalesOrderInfo2();
@淘@淘: 恩 还是初始化问题 哈哈
欢迎加入.Net高级部落173844862