una - Modo de edición de un clic de celda de DataGrid en wpf c#?
habilitar edicion datagridview c# (1)
Tengo DataGrid en mi aplicación wpf. Está teniendo algunos eventos. Necesito editar la celda de la cuadrícula de datos con un solo clic. Actualmente está cambiando cuando hago doble clic en la celda. He tomado una puñalada a algo. Sin embargo, no funciona para mí. Las filas y columnas no son consistentes. Dinámicamente crearé una columna para Datagrid.
este es mi código ...
Xaml:
<DataGrid Name="dgTest" AutoGenerateColumns="True" CanUserResizeColumns="False" CanUserAddRows="False"
ItemsSource="{Binding NotifyOnSourceUpdated=True}"
HorizontalAlignment="Left"
SelectionMode="Single"
SelectionUnit="Cell"
IsSynchronizedWithCurrentItem="True"
CellStyle="{StaticResource DataGridBorder}"
CurrentCellChanged="dgTest_CurrentCellChanged"
CellEditEnding="dgTest_CellEditEnding"
GotFocus="dgTest_GotFocus" LostFocus="dgTest_LostFocus"
GotKeyboardFocus="TextBoxGotKeyboardFocus" LostKeyboardFocus="TextBoxLostKeyboardFocus"
AutoGeneratingColumn="dgTest_AutoGeneratingColumn"/>
He intentado agregar un código al evento "GotFocus". sin embargo, no funciona para mí. Cualquier ayuda sería realmente valorada.
CS:
private void dgTest_GotFocus(object sender, RoutedEventArgs e)
{
// Lookup for the source to be DataGridCell
if (e.OriginalSource.GetType() == typeof(DataGridCell))
{
// Starts the Edit on the row;
DataGrid grd = (DataGrid)sender;
grd.BeginEdit(e);
}
}
Prueba esto:
Conecta el evento PreviewMouseLeftButtonDown en tu DataGrid:
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter
Event="PreviewMouseLeftButtonDown"
Handeler="DataGridCell_PreviewMouseLeftButtonDown"/>
</Style>
</DataGrid.Resources>
Luego en el código detrás:
private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DataGridCell cell = (DataGridCell) sender;
if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
{
if (!cell.IsFocused)
{
cell.Focus();
}
if (grdData.SelectionUnit != DataGridSelectionUnit.FullRow)
{
if (!cell.IsSelected)
{
cell.IsSelected = true;
}
}
else
{
DataGridRow row = FindVisualParent<DataGridRow>(cell);
if (row != null && !row.IsSelected)
{
row.IsSelected = true;
}
}
}
}
static T FindVisualParent<T>(UIElement element) where T : UIElement
{
UIElement parent = element;
while (parent != null)
{
T correctlyTyped = parent as T;
if (correctlyTyped != null)
{
return correctlyTyped;
}
parent = VisualTreeHelper.GetParent(parent) as UIElement;
}
return null;
}