none
C#前台数据绑定,类型转换 RRS feed

  • 问题

  • 我的前台绑定这样的
    Text='<%# "¥"+DataBinder.Eval(Container,"DataItem.(decimal.Parse(p_kt_price))",{0:f}) %>'
    其中p_kt_price是char类型的,所以我要把它变成decimal型的,然后保留两位小数,但是做不到,请教大家 !
    下面的这个,我也试过了,也不行
    Text='<%# "¥"+DataBinder.Eval(Container.DataItem,"decimal.Parse(p_kt_price)","{0:f}") %>'
    谢谢大家了
    还有就是(这个问题与上面的不相联系),我这样绑定一个数据Text='<%# Eval("bl_name") %>',它显示的结果为862dd3255@qq.com,我怎么让它显示成中间加星号的,如:86***@qq.com ?

    ps:对于第二个问题:如果原来的是 “3i5k32我的541fdf3332” 这样的字符串,怎么让它只显示成保留前两个字符,即:3i****
    • 已编辑 NewJoin 2009年9月20日 9:48
    • 已移动 孟宪会Moderator 2009年9月21日 3:38 (发件人:Web 相关讨论(IIS,IE8等))
    2009年9月20日 7:57

答案

  • 你好 对于第一个问题 既然是int型为什么还要保留小数点呢

    Text='<%# "¥"+Convert.ToInt32(DataBinder.Eval(Container.DataItem,"p_kt_price")).ToString("F2")%>'
    对于第二个问题

    Text='<%# System.Text.RegularExpressions.Regex.Replace(Eval("bl_name").ToString(),@"(?<=[\w]{2})(.+)(?=@)","***") %>'
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月20日 8:33
    版主
  • 您好,可以使用.ToString("0.00"); 但我想小数后两位将永远是.00,因为源类型是char。
    2009年9月20日 11:05
    版主

  • Text='<%# Eval("p_kt_price", "¥ {0:N2}") %>'

    数字 {0:N2} 12.36  
    数字 {0:N0} 13  
    货币 {0:c2} ¥12.36  
    货币 {0:c4} ¥12.3656  
    货币 "¥{0:N2}" ¥12.36 
    public static string strStar(string str)
        {
            string Start = string.Empty;
            int count = 0;
            count = str.IndexOf("@") - 2;
            string st1 = str.Substring(str.IndexOf("@") + 1);
            for (int i = 0; i < count; i++)
            {
                Start += "*"; //获取截取数字个数用"*"号代替
            }
            str = str.Substring(0, 2) + Start + st1;       
            return str;
        }
    protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(strStar("862dd3255@qq.com"));   
            Response.Write(strStar("100000@qq.com"));
        }
    输出: 86*******qq.com
         10****qq.com  
    2009年9月21日 6:25
  • 你好,你可以在 SQL 语句处理
    ------------------------------
    
    
    DECLARE @T TABLE (col1 VARCHAR(10), col2 NVARCHAR(20))
    
    INSERT INTO @T VALUES ('5', '862dd3255@qq.com')
    INSERT INTO @T VALUES ('5.1', 'JJ2862dd3255@qq.com')
    
    SELECT 
    	col1 = CAST(col1 AS DECIMAL(18,2)),
    	col2 = SUBSTRING(col2, 1, 2) + '*****' + SUBSTRING(col2, CHARINDEX('@', col2), 100)
    	FROM @T
    	
    --结果
    --5.00	86*****@qq.com
    --5.10	JJ*****@qq.com
    


    知识改变命运,奋斗成就人生!
    2009年9月21日 6:27
    版主
  • 谢谢您了,这个问题已经用正则表达式解决了
    Text='<%# System.Text.RegularExpressions.Regex.Replace(Eval("bl_name").ToString(),@"(?<=[\w]{2})(.+)(?=@)","***") %>'

    2009年9月21日 6:31

全部回复

  • 你好 对于第一个问题 既然是int型为什么还要保留小数点呢

    Text='<%# "¥"+Convert.ToInt32(DataBinder.Eval(Container.DataItem,"p_kt_price")).ToString("F2")%>'
    对于第二个问题

    Text='<%# System.Text.RegularExpressions.Regex.Replace(Eval("bl_name").ToString(),@"(?<=[\w]{2})(.+)(?=@)","***") %>'
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月20日 8:33
    版主
  • 太感谢您了,第一个问题是我说错了,是要转换成Decimal或浮点类型的,总之就是带有小数点的,然后最后保留两位小数来显示

    2009年9月20日 8:36
  • 您好,可以使用.ToString("0.00"); 但我想小数后两位将永远是.00,因为源类型是char。
    2009年9月20日 11:05
    版主
  • 太感谢您了,第一个问题是我说错了,是要转换成Decimal或浮点类型的,总之就是带有小数点的,然后最后保留两位小数来显示


    第一个问题按照那种方式也会显示后边两位小数点的 比如25 显示为25.00
    如jiyuan所述因为是char 所以后两位永远是.00
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月21日 5:31
    版主
  • 可是数据库里的数据有的是25,有点是25.1这种的,而我要显示成25.00和25.10,所以想把它先转换成decimal,再用正则表达式保留两位小数,可以吗?

    2009年9月21日 5:38
  • 可是数据库里的数据有的是25,有点是25.1这种的,而我要显示成25.00和25.10,所以想把它先转换成decimal,再用正则表达式保留两位小数,可以吗?


    因为您提到“其中p_kt_price是char类型的”,如果是数据库中的数据且是非整型是可以的。您可以测一下。
    2009年9月21日 5:56
    版主

  • Text='<%# Eval("p_kt_price", "¥ {0:N2}") %>'

    数字 {0:N2} 12.36  
    数字 {0:N0} 13  
    货币 {0:c2} ¥12.36  
    货币 {0:c4} ¥12.3656  
    货币 "¥{0:N2}" ¥12.36 
    public static string strStar(string str)
        {
            string Start = string.Empty;
            int count = 0;
            count = str.IndexOf("@") - 2;
            string st1 = str.Substring(str.IndexOf("@") + 1);
            for (int i = 0; i < count; i++)
            {
                Start += "*"; //获取截取数字个数用"*"号代替
            }
            str = str.Substring(0, 2) + Start + st1;       
            return str;
        }
    protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(strStar("862dd3255@qq.com"));   
            Response.Write(strStar("100000@qq.com"));
        }
    输出: 86*******qq.com
         10****qq.com  
    2009年9月21日 6:25
  • 你好,你可以在 SQL 语句处理
    ------------------------------
    
    
    DECLARE @T TABLE (col1 VARCHAR(10), col2 NVARCHAR(20))
    
    INSERT INTO @T VALUES ('5', '862dd3255@qq.com')
    INSERT INTO @T VALUES ('5.1', 'JJ2862dd3255@qq.com')
    
    SELECT 
    	col1 = CAST(col1 AS DECIMAL(18,2)),
    	col2 = SUBSTRING(col2, 1, 2) + '*****' + SUBSTRING(col2, CHARINDEX('@', col2), 100)
    	FROM @T
    	
    --结果
    --5.00	86*****@qq.com
    --5.10	JJ*****@qq.com
    


    知识改变命运,奋斗成就人生!
    2009年9月21日 6:27
    版主
  • 谢谢您了,这个问题已经用正则表达式解决了
    Text='<%# System.Text.RegularExpressions.Regex.Replace(Eval("bl_name").ToString(),@"(?<=[\w]{2})(.+)(?=@)","***") %>'

    2009年9月21日 6:31
  • 偶滴正则啊~~~~
    #_-!
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月21日 9:21
    版主
  • heh 谢谢了啊

    2009年9月21日 9:42