2011-12-28 9 views
2

Мне нужно написать простую функцию, которая, когда человек вводит число ящиков, затем запускает событие с нажатием клавиши и number of boxes*someamount попадает в колонку количества. Я добавил DataGridView с помощью перетаскивания управленияkeypress событие в представлении datagrid?

Я так думаю код будет записан здесь, согласно моим исследованиям

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e) { 

} 

Но я не знаю, как поставить KeyUp событий и доступа к колонке numberofboxes and Amount , Спасибо

+1

Используйте событие CellEndEdit. –

+0

@HansPassant спасибо и как я могу получить доступ к столбцу –

+0

Он передается вашему обработчику событий, свойству e.ColumnIndex. Обязательно используйте библиотеку MSDN для поиска таких ответов. –

ответ

7

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

 public Form1() 
    { 
     InitializeComponent(); 
     MyDataGridViewInitializationMethod(); 
    } 


    private void MyDataGridViewInitializationMethod() 
    { 

     dataGridView1.EditingControlShowing += 
    new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing); 
    } 

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     e.Control.KeyPress += 
      new KeyPressEventHandler(Control_KeyPress); 
    } 

    private void Control_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (char.IsNumber(e.KeyChar)) 
     { 

      string cellValue = Char.ToString(e.KeyChar); 
      //Get the column and row position of the selected cell 
      int column = dataGridView1.CurrentCellAddress.X; 
      int row = dataGridView1.CurrentCellAddress.Y; 

      if (column == 1) 
      { 
      //Gets the value that existings in that cell 
      string test = dataGridView1[column, row].EditedFormattedValue.ToString(); 
      //combines current key press to the contents of the cell 
      test = test + cellValue; 
      int intNumberBoxes = Convert.ToInt32(test); 
      //Some amount to mutiple the numberboxes by 
      int someAmount = 10; 
      dataGridView1[column + 1, row].Value = intNumberBoxes * someAmount; 
      } 
     } 
    } 


} 
+0

Большое спасибо за вашу помощь, ваш комментарий в коде также мне очень помог. спасибо спасибо –

+0

Не беспокойтесь, ваш прием. – Standage

+0

Не будет ли ваш обработчик событий 'dataGridView1_EditingControlShowing' подписываться на новый обработчик события KeyPress каждый раз? Это означает, что каждый раз, когда вы редактируете другую ячейку, вы получаете все больше дубликатов вызовов Control_KeyPress'. Вероятно, вы должны сделать '- =' перед '+ =' или что-то еще. –

0

для vb.net

Десятичный проверки:

Public Sub New() 
     InitializeComponent() 
     MyDataGridViewInitializationMethod() 
    End Sub 
    Private Sub MyDataGridViewInitializationMethod() 
     AddHandler dataGridView1.EditingControlShowing, AddressOf dataGridView1_EditingControlShowing 
    End Sub 
    Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) 
     AddHandler e.Control.KeyPress, AddressOf Control_KeyPress 
    End Sub 
    Dim dotOnce As Boolean 
    Private Sub Control_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) 
     If e.KeyChar Like "[']" Then 
      e.Handled = True 
      Exit Sub 
     End If 
     If e.KeyChar = "." Then 
      If dotOnce Then 
       e.Handled = True 
      End If 
      dotOnce = True 
     Else 
      If (Not e.KeyChar Like "[0-9 . ]") Then 
       e.Handled = True 
       Exit Sub 
      End If 
     End If 
      End Sub 
+0

Не могли бы вы объяснить этот код для тех, кто может прийти позже? –

+0

ok добавит комментарии в код ... –

Смежные вопросы