【问题标题】:Format ItemTemplate GridView money item to thousand seperator ASP.NET?将 ItemTemplate GridView 金钱项目格式化为千位分隔符 ASP.NET?
【发布时间】:2015-09-07 05:57:10
【问题描述】:

在我使用的 GridView ItemTemplate 中,我在 SQL Server 表中有货币类型的 Salary 字段:

<asp:TemplateColumn ItemStyle-CssClass="Text">
    <HeaderTemplate>Basic Salary</HeaderTemplate>
        <ItemTemplate>
            <%# DataBinder.Eval(Container, "DataItem.BasicSalary", "{0:0,0}")%>
        </ItemTemplate>
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
</asp:TemplateColumn>

但它只显示:6500000.0000 而我想要的是:6,500,000。那么怎么办呢?请帮忙! 如果我使用这个功能:

protected string Format_Number(string Number)
{
    Number = Number.Replace(".", "");
    Number = Number.Replace(",", "");
    var tmp = "";
    while (Number.Length > 3)
    {
        tmp = "." + Number.Substring(Number.Length - 3) + tmp;
        Number = Number.Substring(0, Number.Length - 3);
    }
    tmp = Number + tmp;
    return tmp;
}

然后在 ItemTemplate 中:

<ItemTemplate>
    <asp:label ID="lblSalary" 
               runat="server" 
               Text='<%# Format_Number(DataBinder.Eval(Container.DataItem, "Salary").ToString()) %>'>
    </asp:label>

输出是: 6.500.000.000 我想删掉最后 3 位数字。怎么办?

【问题讨论】:

  • 您的格式是正确的,我猜您的数据绑定是字符串类型有什么问题。这就是您的格式不起作用的原因。

标签: c# asp.net sql-server gridview currency


【解决方案1】:

无论如何..你将它转换为十进制然后重新格式化它应该可以工作

 protected string Format_Number(string Number)
 {
    // Variable
    string value = string.Empty;
    decimal castValue = 0;
    bool isValid = false;

    // Check
    if (Number != string.Empty)
    {
        // Parse
        isValid = decimal.TryParse(Number, out castValue);

        // Check & Set Decimal Valud
        if (isValid) value = castValue.ToString("0,0");
    }


    return value;
 }

【讨论】:

  • 我在 SQL 表中将货币类型转换为十进制并使用此函数。它完美地工作!谢谢!小数或货币类型也可以使用。
  • 如果您在 SQL 中转换了类型,则根本不需要此函数....在您的 Eval 中只需将其格式化为 {0:0,0} 应该可以工作
  • 使用此函数有效,但使用 Eval 和 {0:0,0} 无效!
  • 我试过我用这个作品。 .也许您可以尝试一下...确保您的数据类型返回是“数字”类型
【解决方案2】:

也许你可以试试这个

salary = salary.Replace(".", "");
salary = salary.Replace(",", "");
string tmp = (Convert.ToInt64(salary)).ToString("N", new CultureInfo("en-US"));

【讨论】:

    【解决方案3】:

    您没有使用任何函数“Format_Number(string Number)”。直接绑定为money数据类型。这对我有用。

    <asp:TemplateField HeaderText="Basic Salary">
                    <HeaderTemplate>Basic Salary</HeaderTemplate>
                    <ItemTemplate>
                        <%# DataBinder.Eval(Container, "DataItem.BasicSalary", {0:0}")%>
                    </ItemTemplate>
                    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                </asp:TemplateField>
    

    【讨论】:

      【解决方案4】:

      既然是字符串,为什么不直接使用子字符串呢?

      就像:

      return tmp.Substring(0, tmp.Length - 4);
      

      【讨论】:

      • 当字符串只有65时会发生什么?
      • 如果我们使用 return tmp.Substring(tmp.Length - 4);输出为 000
      • @Mathemats 你应该先检查一下,这是真的。
      • @user3035133 是的,我犯了一个错误,我已经纠正了:)
      • 来吧 Stefan,不要改变你的答案然后告诉我我错了。
      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2016-10-03
      • 2018-09-05
      • 2022-07-31
      • 1970-01-01
      • 2020-10-16
      • 2016-10-07
      相关资源
      最近更新 更多