我该怎么转“。”在文本框中输入小数值时,小数点为“,”逗号?

时间:2015-07-27 16:32:13

标签: c# asp.net sql-server webforms

请帮忙解决这个问题。我没有找到解决方案。

我构建了一个允许输入一些数据的WebForm(来自多个控件,一个TextBox包含一个表示数量的数字)。 WebForm在ASP.NET 4.0中(带有C#)。

WebForm将控件中的所有值传递到SQL Server 2014版本上托管的数据库中。问题出现了:Web应用程序应该在德语环境中运行。 (我的机器和其他将访问应用程序的人)。

我的问题是即使区域设置设置为德语,我仍然必须输入带有“。”的小数值。小数点,而不是在文本框中用“,”逗号表示数量。

  

如果我用逗号输入小数值,它们会粘在一起   整数,而不是小数。例如11123,34记录在   表1112324 1123.45在表中记录为1123,45

注意:我在数据库中设置了字段,此TextBox在SQL表定义中的地址为“Money”类型。

  

通过GridView访问表格内容(如书面内容)   控制在另一个webform中,我用“,”逗号获取所有值,   无论区域设置是否设置为德语或英语。

为数量存储的数值格式将其显示从“,”逗号更改为“。”只有在SQL Server上直接在表上运行SELECT时(我的意思是在SQL Server Management Studio中),或者当我在SQL Server上“设置语言到德语/英语”时,才会出现反对意见。

我的问题是:

  • 我应该怎么做,在文本框中输入与“,”相同的数值,并在SQL表中用“,”小数点处理。
  

我不希望用户使用“。”的小数分隔符。进入时   数量,并在阅读时使用小数分隔符“,”   数量超出数据库。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

正确的解决方案:将值转换为文本并返回的每个操作都必须适当地指定文化。

   // formatting/parsing 
   var userCuluture = new CultureInfo("de-de");
   textBox.Text = String.Format(userCuluture, "{0} for {1}", DateTime.Now, 1.99);
   var value = float.Parse(textBoxAmount.Text, userCulture);

   dbProvider.WriteValue(value); // use InvariantCulture inside for formating

穷人版本:更改线程的文化,因此默认文化用于转换并进行调整,以便在用户文化设置为当前时完成对用户数据的操作,并在InvariantCulture时完成数据库操作:

   // Manipulation of user's data to use "userCulutre" rules
   Thread.CurrentThread.CurrentCulture = userCulture;
   textBox.Text = String.Format("{0} for {1}", DateTime.Now, 1.99);
   var value = float.Parse(textBoxAmount.Text);

   // DB/file manipulations to use Invariant rules
   Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
   dbProvider.WriteValue(value); // use current culture for formatting/parsing

您可以通过https://www.bing.com/search?q=asp.net+culture找到管理当前文化的方法,例如Set Culture in an ASP.Net MVC app