2010-01-28 10 views
1

Я использую Infragistics UltraWinGrid (версия Win 9.1). Поведение по умолчанию - позволить пользователю вводить текст в ячейку. Когда одна копия нескольких ячеек из электронной таблицы Excel, в UltraWinGrid будут вставлены только данные первой ячейки.Как я могу эмулировать нажатие клавиши с копией и вставкой в ​​Infragistics UltraWinGrid?

Можно легко изменить поведение, чтобы вставить несколько ячеек, установив ячейки UltraWinGrid в значение undeitable с помощью CellClickAction.CellSelect; К сожалению, когда вы это делаете, вы не можете вводить данные в ячейки.

Итак, я попытался изменить эти настройки с помощью событий для InitializeLayout, KeyDown и KeyPress.

private void ugridQuoteSheet_InitializeLayout(object sender, InitializeLayoutEventArgs e) 
    { 
     e.Layout.Override.AllowMultiCellOperations = AllowMultiCellOperation.All; 
     e.Layout.Override.CellClickAction = CellClickAction.CellSelect; 
    } 

    //Event used to circumvent the control key from choking in 
    //the KeyPress event. This doesn't work btw. 
    private void ugridQuoteSheet_KeyDown(object sender, KeyEventArgs e) 
    { 
     UltraGrid grid = (UltraGrid)sender; 

     if (e.Control == true) 
     { 
      e.SuppressKeyPress = true; 
     } 
    } 

    // This event comes after the KeyDown event. I made a lame attempt to stop 
    // the control button with (e.KeyChar != 22). I lifted some of this from 
    // the Infragistics post: http://forums.infragistics.com/forums/p/23690/86732.aspx#86732 
    private void ugridQuoteSheet_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     UltraGrid grid = (UltraGrid)sender; 
     if ((grid != null) && (grid.ActiveCell != null) && (!grid.ActiveCell.IsInEditMode) && (e.KeyChar != 22)) 
     { 
      grid.PerformAction(UltraGridAction.EnterEditMode); 
      EditorWithText editor = (EditorWithText)grid.ActiveCell.EditorResolved; 
      editor.TextBox.Text = e.KeyChar.ToString(); 
      editor.TextBox.SelectionStart = 1; 
     } 
    } 

    // This puts the grid in CellSelect mode again so I won't edit text. 
    private void ugridQuoteSheet_AfterCellUpdate(object sender, CellEventArgs e) 
    { 
     this.ugridQuoteSheet.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect; 
    } 

Теперь я могу снова вводить значения в ячейки. Проблема в том, что когда я нажимаю [ctrl] [v] для вставки, KeyPressEventArgs.KeyChar равен 22, и нет «v». Вы можете увидеть мою бесполезную попытку обойти эту проблему в делегате ugridQuoteSheet_KeyPress. Какая правильная комбинация обработки событий и настроек CellClickAction позволяет копировать и вставлять в ячейку UltraWinGrid?

ответ

1

После немного более внимательного чтения сообщения, упомянутого ранее (http://forums.infragistics.com/forums/p/23690/86732.aspx#86732 ) Я смог решить эту проблему.

Это может быть все обработано в событии KeyPress после установки UltraWinGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect; в случае InitializeLayout, конечно.

private void ugridQuoteSheet_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     UltraGrid grid = (UltraGrid)sender; 

     if (!Char.IsControl(e.KeyChar) && grid != null && grid.ActiveCell != null && 
      grid.ActiveCell.EditorResolved is EditorWithText && !grid.ActiveCell.IsInEditMode) 
     { 
      grid.PerformAction(UltraGridAction.EnterEditMode); 
      EditorWithText editor = (EditorWithText)grid.ActiveCell.EditorResolved; 
      editor.TextBox.Text = e.KeyChar.ToString(); 
      editor.TextBox.SelectionStart = 1; 
     } 
    } 

Я не знал, как обращаться с одновременным нажатием клавиши [ctrl] [v]. Char.IsControl (e.KeyChar) делает трюк здесь.