c# - rango - ¿Cómo puedo establecer el valor de una celda de cuadrícula de datos usando sus valores de índice de columna y fila?
indice excel (3)
Para actualizar un WPF DataGridCell mediante programación, podría haber muchas formas ...
Una de las formas es actualizar el valor en el elemento de datos encuadernado. De esta forma, las notificaciones de cambio de propiedad se activarán para todas las imágenes suscritas, incluida la DataGridCell en sí misma ...
Enfoque de reflexión
var boundItem = dataGrid2.CurrentCell.Item;
//// If the column is datagrid text or checkbox column
var binding = ((DataGridTextColumn)dataGrid2.CurrentCell.Column).Binding;
var propertyName = binding.Path.Path;
var propInfo = boundItem.GetType().GetProperty(propertyName);
propInfo.SetValue(boundItem, yourValue, new object[] {});
Para DataGridComboBoxColumn
tendrías que extraer SelectedValuePath
y usar eso en lugar de propertyName
.
De todos modos, incluir poner celda en modo de edición y actualizar su valor de contenido usando algún comportamiento en EditingElementStyle
... Me resulta engorroso.
Hazme saber si realmente lo necesitas.
¿Cómo puedo insertar un valor en una celda de cuadrícula de datos específica utilizando la columna de celdas y los índices de fila. Tengo el índice de fila y columna guardado como ints.
Obtuve los índices como a continuación. Básicamente, tomo el valor de la celda, el índice de la columna y el índice de la fila y el envío como un XML serializado a Java que lo envía de vuelta y necesita ponerlo en la misma celda.
int column = dataGrid2.CurrentCell.Column.DisplayIndex;
int row = dataGrid2.SelectedIndex;
Gracias,
Para una cuadrícula de datos, accede a las filas a través de la propiedad Artículos. Las celdas son una colección de un artículo.
dataGrid2.Items[row].Cells[column].Text = "text";
Esto funciona siempre que los datos se hayan vinculado a la cuadrícula de datos durante el ciclo de vida de la página actual. Si este no es el caso, entonces creo que estás estancado caminando los controles.
Usé una variación basada en WPF, es un ejemplo para hacer toda la fila y funcionó !:
(sender as DataGrid).RowEditEnding -= DataGrid_RowEditEnding;
foreach (var textColumn in dataGrid2.Columns.OfType<DataGridTextColumn>())
{
var binding = textColumn.Binding as Binding;
if (binding != null)
{
var boundItem = dataGrid2.CurrentCell.Item;
var propertyName = binding.Path.Path;
var propInfo = boundItem.GetType().GetProperty(propertyName);
propInfo.SetValue(boundItem, NEWVALUE, new object[] { });
}
}
(sender as DataGrid).RowEditEnding += DataGrid_RowEditEnding;
PD: asegúrese de usar tipos de valores válidos para la columna (quizás a través de una instrucción switch).
por ejemplo: activar propertyName o propInfo ... propInfo.SetValue (boundItem, (type) NEWVALUE, new object [] {});
switch (propertyName)
{
case "ColumnName":
propInfo.SetValue(boundItem, ("ColumnName"''s type) NEWVALUE, new object[] { });
break;
default:
break;
}