在reportview表格中 有一个格的值是 =Fields!PriceBig.Value 
在数据库的数据是:“壹万贰仟叁佰肆拾伍元零角零分整”及12345.00的大写
但是由于打印纸的格式是固定的 分别是 “    万    仟   佰  拾   元    角   分”
所以我必须把PriceBig 分解出来 !
请问 在reportview中 
1. 我如何截取“万”前面数 。
2. 如何截取“万”和“仟”之间那个字符串。
请指教!!!!~~~

解决方案 »

  1.   

    分析字符串,提取值 ,例如string a = "壹万贰仟叁佰肆拾伍元零角零分整";
    Response.Write(a.Substring(a.IndexOf("万") - 1, 1)); //输出壹自已写一个方法, 分离出来后,在对应纸张.
      

  2.   

      string a = "壹万贰仟叁佰肆拾伍元零角零分整";
                Console.WriteLine(a.Substring(0, a.IndexOf('万')));
                Console.WriteLine(a.Substring(a.IndexOf('万')+1, a.IndexOf('仟')-2));
      

  3.   

    楼主用的是水晶报表还是RDLC报表
      

  4.   

    估计是RDLC报表
    你把字符串换成你的字段就行了,
    我这里使用的字符串常量来进行测试的报表中用的函数是VB的,这个你在表达式中看他的解释就知道了
    '万
    =IIf(InStr("壹万贰仟叁佰肆拾伍元零角零分整","万")>0,left("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","万")-1),"")'仟
    =IIf(InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元零角零分整","万")>0,mid("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","万")+1,InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")-InStr("壹万贰仟叁佰肆拾伍元零角零分整","万")-1),left("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")-1))
    ,"")'佰
    =IIf(InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")>0,mid("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")+1,InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")-InStr("壹万贰仟叁佰肆拾伍元零角零分整","仟")-1),left("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")-1))
    ,"")'拾
    =IIf(InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")>0,mid("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")+1,InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")-InStr("壹万贰仟叁佰肆拾伍元零角零分整","佰")-1),left("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")-1))
    ,"")'元
    =IIf(InStr("壹万贰仟叁佰肆拾伍元零角零分整","元")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")>0,mid("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")+1,InStr("壹万贰仟叁佰肆拾伍元零角零分整","元")-InStr("壹万贰仟叁佰肆拾伍元零角零分整","拾")-1),left("壹万贰仟叁佰肆拾伍元零角零分整",InStr("壹万贰仟叁佰肆拾伍元零角零分整","元")-1))
    ,"")'角
    =IIf(InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","元")>0,mid("壹万贰仟叁佰肆拾伍元陆角柒分整",InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","元")+1,InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")-InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","元")-1),left("壹万贰仟叁佰肆拾伍元陆角柒分整",InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")-1))
    ,"")'分
    =IIf(InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","分")>0
    ,iif(InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")>0,mid("壹万贰仟叁佰肆拾伍元陆角柒分整",InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")+1,InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","分")-InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","角")-1),left("壹万贰仟叁佰肆拾伍元陆角柒分整",InStr("壹万贰仟叁佰肆拾伍元陆角柒分整","分")-1))
    ,"")
      

  5.   

    解释一下,默认你最大数为万
    取万时,先用iif判断是否含有万字,如果含有,就取万字前面的字符,没有就打印空字符仟及其他,先判断是否存在本位(如仟),如果不存在就打印空字符串,
    如果存在,则进一步判断是否含有前一位(如万),
    如果存在则取两万之间的,如(万和仟)之间的内容,
    如果不存在,则取本位(如仟)前面的所有字符涉及到的函数
    iif(表达式,真值,假值),类似于C#中的?:表达式
    instr(字符串1,字符串2),获取字符串2在字符串1中的位置,如果不包含,则返回0,如果包括,则返回位置,从1开始,这点与C#有所不同,类似于C#中的string.Indexof
    left(字符串,个数),获取字符串左边的指定个数的字符串。类似于C#中的string.Substring
    mid(字符串,位置,长度),获取字符串中从指定位置开始的指定长度的子字符串,注意:位置从1开始,类似于C#中的string.Substring
      

  6.   

    问题解决了 !比如得到万:
    =IIf(InStr(Fields!PriceBig.Value,"万")>0,left(Fields!PriceBig.Value,InStr(Fields!PriceBig.Value,"万")-1),"")
      

  7.   

    是真的 真的报错误号了!!代码:
    =IIf(InStr(Fields!ETBigPrice.Value,"万")>0,left(Fields!ETBigPrice.Value,InStr(Fields!ETBigPrice.Value,"万")-1),"*")
    错误图片:
      

  8.   

    是真的报错了!代码:
    =IIf(InStr(Fields!ETBigPrice.Value,"万")>0,left(Fields!ETBigPrice.Value,InStr(Fields!ETBigPrice.Value,"万")-1),"*")错误图片:
      

  9.   

    原因是iif语句不管怎样总是计算整个表达式的值,导致left第二个参数为负数时出错。
    这下只有使用自定义代码的方法
    1、进入报表属性,注意是整够报表的属性,
    然后选择“代码”标签,
    如下图所示
    2、输入以下代码,作用是获取传入字符串中的万前面的内容,如果没有万就返回空字符串。
    如果需要不含万返回星号(*),将value=""改成value="*"即可。public function GetWan( str as string) as string
      
      dim value as string  if instr(str,"万")>0 then
        value=left(str,InStr(str,"万")-1)
      else
        value=""
      end if  getwan=valueend function3、更改你以前的表达式,参考你上一楼的代码
    应该将
    =IIf(InStr(Fields!ETBigPrice.Value,"万")>0,left(Fields!ETBigPrice.Value,InStr(Fields!ETBigPrice.Value,"万")-1),"*")
    改成
    =code.getwan(Fields!ETBigPrice.Value)出现红色波浪线不要管它。