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
有什么想法吗?
答案 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;
}