如何在DataRepeater中格式化数字或字符串?

时间:2011-10-05 20:31:53

标签: c# datatable datarepeater

Tech:.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并强制列具有上面列出的格式。

手动更改数据格式:(它是Float)

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

抱歉我的英语不好。这对我来说很好。

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

答案 1 :(得分:1)

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

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

BTW:您在i++声明中忘记了for

答案 2 :(得分:0)

如果你想自动将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;
        }