格式化包含数值的DataGridView TextBox列

时间:2018-06-29 18:20:08

标签: c# parsing datagridview int

我有一个带有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()))
        });
    }
}

2 个答案:

答案 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(), ""))
        });
    }
}