最后一个可编辑的单元格按下回车时增加一行个人感觉太繁琐了点 最好是直接给Grid加一行 而不是给对应的集合加一行,寻求更好的解决方案!
/// <summary>
/// Grid最后一列加行和往右拐
/// </summary>
/// <typeparam name="Tresult"></typeparam>
/// <param name="dataGrid"></param>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <param name="li"></param>
public static void Grid_Right<Tresult>(this DataGrid dataGrid, object sender, KeyEventArgs e) where Tresult : class, new()
{
var uie = e.OriginalSource as UIElement;
if (e.Key == Key.Enter)
{
e.Handled = true;
uie.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
dataGrid.BeginEdit();
if (dataGrid.CurrentColumn != null)
{
if (dataGrid.CurrentColumn.IsReadOnly == true)
{
for (int b = dataGrid.CurrentColumn.DisplayIndex; b < dataGrid.Columns.Count; b++)
{
for (int k = 0; k < dataGrid.Columns.Count; k++)
{
if (dataGrid.Columns[k].DisplayIndex == b)
{
if (dataGrid.Columns[k].IsReadOnly == false && dataGrid.Columns[k].Visibility == Visibility.Visible)
{
dataGrid.CurrentColumn = dataGrid.Columns[k];
dataGrid.SelectedItem = dataGrid.CurrentItem;
dataGrid.BeginEdit();
return;
}
else if (k == dataGrid.Columns.Count - 1 && (dataGrid.Columns[k].IsReadOnly == true || dataGrid.Columns[k].Visibility == Visibility.Hidden))
{
if (dataGrid.SelectedIndex != dataGrid.Items.Count - 1)
{
dataGrid.SelectedIndex = dataGrid.SelectedIndex + 1;
dataGrid.CurrentColumn = dataGrid.Columns[0];
dataGrid.CurrentItem = dataGrid.SelectedItem;
b = 0;
}
else
{
//PropertyInfo p = dataGrid.CurrentItem.GetType();
ModelObservableCollection<Tresult> li = dataGrid.ItemsSource as ModelObservableCollection<Tresult>;
li.Insert(dataGrid.SelectedIndex + 1, new Tresult());
dataGrid.SelectedIndex = dataGrid.SelectedIndex + 1;
dataGrid.CurrentColumn = dataGrid.Columns[0];
dataGrid.CurrentItem = dataGrid.SelectedItem;
b = 0;
}
}
}
}
}
}
}
}
}