Как разрешить только 2 десятичных значения в datagridview? - PullRequest
0 голосов
/ 29 марта 2012

Друзья, я использую datagridview в моем приложении vs 2005 для Windows. В сетевом представлении для столбцов 3 и 4 я хочу разрешить пользователю вводить десятичное значение до 2 (например, 19,88 или 29765,01). Как я могу ограничить его до 2 десятичных знаков? А также, если пользователь вводит «.1», его следует преобразовать в «0,10». Любое предложение будет очень полезно. Я уже сделал этот столбец, чтобы принимать только цифры и один десятичный знак (.).

РЕДАКТИРОВАТЬ: Вот мой код. Поток программы не идет внутри условия if. Я дал значение 7889.6655 в ячейке. Оно не должно позволять мне писать дальше 7889.66:

    Regex reg = new Regex("^[0-9]+\\.[0-9]{1,2}$");
    Regex reg1 = new Regex("^[0-9]+\\.[0-9]{2}$");

    if(reg.IsMatch(dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value.ToString()))
    {
      if (!reg1.IsMatch(dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value.ToString()))
      {
          dgView.Rows[e.RowIndex].Cells[dgViewColumn.TOTAL_TCS].Value += "0";
      }
    } 

Ответы [ 3 ]

0 голосов
/ 29 марта 2012

Вы можете проверить, как показано ниже справа,

            Regex reg = new Regex("^[0-9]*(\\.[0-9]{1,2})?$");
            if (reg.IsMatch(dataGridView1.Rows[0].Cells[3].Value.ToString()))
            {

            }

EDIT:

Я проверил приведенный ниже код для текстового поля, он работает нормально. Поместите значение строки datagridview вместо textbox.text в следующем коде.

        Regex reg = new Regex("^[0-9]+\\.[0-9]{1,2}$");
        Regex reg1 = new Regex("^[0-9]+\\.[0-9]{2}$");
        if (reg.IsMatch(textBox1.Text.ToString()))
        {
            if (!reg1.IsMatch(textBox1.Text))
            {
                textBox1.Text += 0;
            }
        } 

EDIT2:

В другом случае вы можете написать что-то вроде ниже

        Regex reg = new Regex("^[0-9]+\\.[0-9]{1,2}$"); 
        Regex reg1 = new Regex("^[0-9]+\\.[0-9]{2}$");
        if (reg.IsMatch(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString()))
        {
            if (!reg1.IsMatch(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString()))
            {
                dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value += "0";
            }
        }
        else
        {
            MessageBox.Show("Please, provide a valid value");
            dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value = "";
            return;
        }
0 голосов
/ 29 марта 2012

Нет способа ограничить пользователя до двух десятичных разрядов со стандартными типами столбцов DataGridView.Чтобы сделать это правильно, вам нужно создать свой собственный DataGridViewMaskedTextBoxColumn, который расширяет стандарт DataGridViewColumn и содержит Winform MaskedTextBox в качестве элемента управления для редактирования.

Я успешно закончил с использованием этих ресурсов:

Хостинг DataGridViewColumn MaskedTextBox
Образец пользовательского столбца DataGridView

Однако, если вы просто хотите отформатировать значения в столбце, чтобы отобразить два десятичных знакаВы можете установить для DataGridViewTextBoxColumn DataGridViewCellStyle.Format свойство значение «N2».Вы также можете отформатировать данные столбца в обработчике CellFormatting события вашего DataGridView.

0 голосов
/ 29 марта 2012

В связанный столбец добавьте атрибут DataFormatString = "{0: n3}"

Если вы используете Eval, то <% # Eval ("NumFailedFiles", "{0: n3}")% </p>

...