2016-02-20 2 views
0

У меня есть DataGridView, который заполняется значениями объекта таким образом:DataGridView пользовательский ввод Validate

POI_grid.AutoGenerateColumns = true; 
POI_grid.DataSource = pois; //pois is an object generated from a class 

Я хотел бы пользователю редактировать некоторые из ячеек в этой сетке, но есть некоторые проверки, что должно произойти ..

В настоящее время я проверяю ввод пользователя с помощью txt-боксов, и мне было предложено сделать это в GridView для простоты. Как я проверка пользовательского ввода заключается в следующем: (я проверить, если пользователь ввел десятичные числа только)

private void txt_X_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != '.' && e.KeyChar != '-')) 
    { 
     e.Handled = true; 
    } 

    if (e.KeyChar == '.') 
    { 
     if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1) 
      e.Handled = true; 
    } 

    if (e.KeyChar == '-' && (sender as TextBox).SelectionStart > 0) 
    { 
     e.Handled = true; 
    } 
} 

Каков наилучший способ проверки пользовательского ввода так же, как я это делаю в текстовых полях, но в DataGridView?

До сих пор я пытался это следующее предложение: Рами

private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
     { 
      decimal por_x; 
      por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value); 

     } 

я, конечно, нужно будет добавить заявление поймать попробовать там, чтобы избежать проблем, но всякий раз, когда это возможно, я хотел бы, чтобы ограничить пользователя так как он типов в клетку, так же, как я делаю в текстовом поле ..

РЕШЕНИЕ:

Вот как я ее решил:

private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
     { 
      decimal por_x; 
      try 
      { 
       por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value); 
      } 
      catch 
      { 

       POI_grid.CurrentCell.Value= "0"; 
      } 


     } 

     private void POI_grid_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      if (e.Exception is FormatException) 
      { 
       MessageBox.Show("Debe ingresar números decimales solamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      else 
      { 
       MessageBox.Show("Verifique el formato del número ingresado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 

ответ

1

Я столкнулся с такой проблемой, но в конце я не нашел способ, чтобы пользователь не вводил фрахтователя, не использующего номера, поэтому я использовал CellEndEdit event для проверки ввода , и если он недействителен, он показывает окно сообщения (только цифры) и сбросить ячейку до 0. , и я надеюсь, что это было полезно для вас.

+0

Привет Рами, вы можете поделиться код? Я обнаружил событие CellEndEdit, но не уверен, как вы проверили запись. Спасибо – Matias

+1

'частное: System :: Пустота metroGrid19_CellEndEdit (System :: Object^отправителем, System :: Окна :: Forms :: DataGridViewCellEventArgs^е) { \t \t \t попробовать { \t \t \t \t Convert :: ToDouble (metroGrid19 -> Ряды [е-> RowIndex] -> Ячейки [е-> ColumnIndex] -> значение-> ToString()); \t \t \t} \t \t \t улов (...) { \t \t \t \t metroGrid19-> Ряды [е-> RowIndex] -> Ячейки [е-> ColumnIndex] -> Значение = "0"; \t \t \t \t \t \t metroButton11-> Enabled = 1; \t \t} ' –

+1

, который находится на C++, просто замените -> in. и не поймать никакого исключения, вы должны поймать определенный –

0

Вот как я ее решил:

private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
     { 
      decimal por_x; 
      try 
      { 
       por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value); 
      } 
      catch 
      { 

       POI_grid.CurrentCell.Value= "0"; 
      } 


     } 

     private void POI_grid_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      if (e.Exception is FormatException) 
      { 
       MessageBox.Show("Debe ingresar números decimales solamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      else 
      { 
       MessageBox.Show("Verifique el formato del número ingresado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
Смежные вопросы