我有一个带有TextBox列的DataGridView。列之一显示记录计数,其格式为###,###,000。该列本身未设置为设置文本格式,但在填充数据源时将格式化数据。顺便说一下,数据源是一个列表。 DataGridView仅仅显示所有内容。
现在,我需要将数字文本值解析为一个变量,这样做就可以了
int.Parse(data_grid_view_row.Cells["col_Record_Count"].Value.ToString())
但是,如果我的数字达到数千,由于格式的原因,它将显示为1000。格式化会生成空格而不是逗号,因为这是配置环境的方式。当我尝试解析该值时,由于数字值中的空格而出现异常。
我尝试格式化字符串值
int.Parse(String.Format("{0:000000000}", data_grid_view_row.Cells["col_Record_Count"].Value.ToString()))
和
int.Parse(String.Format("{0:########0}", data_grid_view_row.Cells["col_Record_Count"].Value.ToString()))
和各种变体,但它会不断返回值中的空格,然后该空格将无法解析。我已经尝试过更换空间,但是它是永久性的。另外,空格显示应该是问号的ASCII键代码63,不是吗?即使我尝试使用键码替换...也没事!
关于这种情况为什么发生以及如何解决的任何想法?
我拥有的完整代码块是
foreach (DataGridViewRow data_grid_view_row in dgv_Migration_Files.Rows)
{
if ((bool)data_grid_view_row.Cells["col_Select"].Value == true)
{
//-------------------------------------------------------------------------
// this is only to test and see what value I get for the space character, will be removed later
string test_str = data_grid_view_row.Cells["col_Record_Count"].Value.ToString().Replace(" ", string.Empty);
test_str = test_str.Replace(" ", "");
for (int k = 0; k < test_str.Length; k++)
{
string newstr = test_str.Substring(k, 1);
var kycode = ASCIIEncoding.ASCII.GetBytes(newstr);
}
//-------------------------------------------------------------------------
migrate.Add(new Migrate()
{
File_Folder = data_grid_view_row.Cells["col_File_Folder"].Value.ToString()
,
File_Name = data_grid_view_row.Cells["col_File_Name"].Value.ToString()
,
Record_Count = int.Parse(String.Format("{0:000000000}", data_grid_view_row.Cells["col_Record_Count"].Value.ToString()))
});
}
}
答案 0 :(得分:0)
使用简单的解决方案:- 如果有可用空间,请删除它,然后简单地解析为INT。
str.Replace(" ", String.Empty)
string data = data_grid_view_row.Cells["col_Record_Count"].Value.ToString().Replace(" ", String.Empty);
int.Parse(data);
让它更容易:-
int.Parse(data_grid_view_row.Cells["col_Record_Count"].Value.ToString().replace(" ", String.Empty));
如果您要在使用此正则表达式进行解析时同时删除空格和逗号
int.Parse(data_grid_view_row.Cells["col_Record_Count"].Value.ToString().replace(/[, ]+/g, " ").trim());
首先检查这个小例子,您将获得清晰的主意:-
string data = "1 0000";
string result = data.Replace(" ", string.Empty);
答案 1 :(得分:0)
由于replace方法没有按预期删除空格,因此我采用了以下解决方案。无论操作系统中设置了什么数字分隔符,这也将删除其他任何数字分隔符。
//get the numeric decimal seperator key code
string dummy_numeric = (1000).ToString(Helper.application_number_display_format);
char replace_char = (char)0;
foreach (char current_char in dummy_numeric)
{
if (!System.Char.IsDigit(current_char))
{
replace_char = current_char;
break;
}
}
//get all the files that are selected for migration
List<Migrate> migrate = new List<Migrate>();
foreach (DataGridViewRow data_grid_view_row in dgv_Migration_Files.Rows)
{
if ((bool)data_grid_view_row.Cells["col_Select"].Value == true)
{
migrate.Add(new Migrate()
{
File_Folder = data_grid_view_row.Cells["col_File_Folder"].Value.ToString()
,
File_Name = data_grid_view_row.Cells["col_File_Name"].Value.ToString()
,
Record_Count = int.Parse(data_grid_view_row.Cells["col_Record_Count"].Value.ToString().Replace(replace_char.ToString(), ""))
});
}
}