Форматировать столбец DataGridView TextBox, содержащий числовые значения - PullRequest
0 голосов
/ 29 июня 2018

У меня есть DataGridView с столбцами TextBox. В одном из столбцов отображается количество записей в формате ###, ###, 000. Сам столбец не настроен на форматирование текста, но данные форматируются при заполнении источника данных. Кстати, источником данных является список. DataGridView просто отображает все, как он получает.

Теперь мне нужно проанализировать числовое текстовое значение в переменную, что хорошо, если сделать

int.Parse(data_grid_view_row.Cells["col_Record_Count"].Value.ToString())

но, если у меня есть числа, достигающие тысяч, он отображается как 1 000 из-за форматирования. Форматирование создает пробел, а не запятую, поскольку так настроена среда. Когда я пытаюсь проанализировать это значение, я получаю исключение из-за пробела в числовом значении.

Я попытался отформатировать строковое значение

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 голосов
/ 29 июня 2018

Поскольку метод замены не удалял пробелы, как я ожидал, я прибег к приведенному ниже решению. Это также удалит любые другие числовые разделители, независимо от того, какой числовой разделитель был установлен, как в ОС.

//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(), ""))
        });
    }
}
0 голосов
/ 29 июня 2018

Используйте простое решение: - Если есть свободное место, удалите его, а затем просто проанализируйте в 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);
...