【问题标题】:How can I format numbers or strings in a DataRepeater?如何在 DataRepeater 中格式化数字或字符串?
【发布时间】:2026-02-15 06:35:01
【问题描述】:

技术:.NET、SQL Server 2008 R2、Winforms

好吧,我这辈子都想不通。

首先,我使用 DataTable 来存储来自 SQL Server 2008 数据库的数据,并将其绑定到 DataRepeater。

我尝试过像这样更改绑定:

label1.DataBindings.Add("Text", history, "Value", true, DataSourceUpdateMode.Never, "", "N");

它在其他地方的文本框和标签上效果很好,但在 DataRepeater 上效果不佳。 (label1 是与 DataRepeater 关联的 ItemTemplate 的一部分)

由于这样绑定数据不起作用,我只想使用我的 DataTable 并强制列具有上面列出的格式。

并手动更改数据的格式:(它是一个浮点数)

for (int i=0;i < history.Rows.Count;i++)
{
    history.Rows[i]["Value"] = String.Format("{0:N}", history.Rows[i]["Value"]);
}

也不行,datarepeater只是把它改回来。

我想要这个:

12,123,123.00

我明白了:

12123123

有什么想法吗?

【问题讨论】:

    标签: c# datatable datarepeater


    【解决方案1】:

    对不起,我的英语不好。这对我来说很好。

    private void textBox10_TextChanged(object sender, EventArgs e)
    {
    string f = String.Format("{0:#0.00}", Convert.ToDouble(((TextBox)sender).Text));
            ((TextBox)sender).Text = f;
    }
    

    示例:

    textBox10.Text= 48
    result= 48.00

    为其他数据类型更改此代码。

    即使用文本框的TextChanged 事件到Datarepeater

    【讨论】:

      【解决方案2】:

      我认为是您的DataTable“历史”将值转换回double。当列的数据类型为double(我怀疑)时,它接受double 的字符串表示形式并将其转换回来。

      您应该在DataTable 中添加一个计算列,并用数字值的字符串表示形式填充它。

      顺便说一句:您在 for 语句中忘记了 i++

      【讨论】:

      • 我认为这是一个可能的解决方案,但是当您有大量需要格式化的数据时,这并不是最好的选择。我必须考虑到这一点。让我们拭目以待,看看是否还有其他解决方案。在我关闭它之前。此外,它实际上是一个浮点数,我删除了 Convert.To 语句,因为在这种情况下它是多余的,但在应用程序的前一部分中使用并复制粘贴了。
      • 将此作为答案,因为这是唯一与数据中继器配合使用的解决方案
      【解决方案3】:

      如果要自动将 12123123 转换为 12,123,123;将此代码放入文本框的 _TextChanged 事件中:

      int i = ((TextBox)sender).SelectionStart;
              if (((TextBox)sender).Text != "")
              {
                  string f = String.Format("{0:N0}", Convert.ToDouble(((TextBox)sender).Text));
                  ((TextBox)sender).Text = f;
                  int len;
                  len = ((TextBox)sender).Text.Replace(",", "").Length;
                  if ((len %= 3) == 1)
                  {
                      i += 1;
                  }
                  ((TextBox)sender).SelectionStart = i;
              }
      

      【讨论】: