如何将焦点从一个单元格更改为下一行和同一列上的另一个单元格

时间:2011-06-14 16:50:04

标签: wpf datagrid

我想将行选择从一行更改为下一行,并将焦点从一个单元格更改为同一列上的另一个单元格。

即在我的数据网格中选择第2行,焦点当前在第2行第3列。

当我点击屏幕上的按钮时,必须选择第3个,焦点必须位于第3行第3列。

现在,如果我输入内容,那么它必须自动反映在第3行第3列。

提前致谢!

2 个答案:

答案 0 :(得分:1)

尝试使用这个小辅助方法,根据列和行项选择单元格

private static void SelectCell(DataGrid dataGrid, DataGridColumn column, Object rowItem) {
         if (rowItem != null) {
            //scroll the item into view
            dataGrid.ScrollIntoView(rowItem);
            dataGrid.ScrollIntoView(rowItem, column);
            //get the cell info
            DataGridCellInfo cellInfo = new DataGridCellInfo(rowItem, column);

            if (dataGrid.CurrentCell.Item == cellInfo.Item && dataGrid.CurrentCell.Column == cellInfo.Column) { }
            else {
               dataGrid.Focus();
               dataGrid.CurrentCell = cellInfo;

               //set the cell to be selected
               dataGrid.SelectedCells.Clear();
               dataGrid.SelectedCells.Add(cellInfo);
            }
         }
      }

答案 1 :(得分:0)

以下代码将解决此问题。

                _dgTemp.CommitEdit();
                object SelectedItem = _dgTemp.SelectedItem;
                DataGridRow _dgRow = DataGridHelper.GetRow(_dgTemp, _dgTemp.Items.IndexOf(SelectedItem));
                DataGridCell _dgCell = DataGridHelper.GetCell(_dgTemp, _dgRow, _dgTemp.Columns.IndexOf(_dgTemp.CurrentColumn));
                _dgCell.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
                _dgTemp.ScrollIntoView(_dgTemp.Items.IndexOf(_dgTemp.CurrentItem));
                _dgTemp.UpdateLayout();
                _dgTemp.SelectedIndex = _dgTemp.Items.IndexOf(_dgTemp.CurrentItem);