c# - Mejor forma de actualizar DataGridView.DataSource
winforms linq-to-sql (4)
Esto no me parece un problema L2S. Esto suena más como un problema con cualquier grilla que estés usando. Todo lo que hace L2S es suministrar datos a su red. Tiene sentido para mí que la fila actual de la grilla cambie después de una actualización. ¿Es posible que deshabilite la cuadrícula, establezca la fila actual para que sea la que desea, y luego habilite la cuadrícula? He hecho esto en el pasado.
Cachondo
Actualmente tengo un DataGridView
en mi aplicación que llené de mis clases de Linq-to SQL así ...
/// <summary>
/// Delegate to update datagrid, fixes threading issue
/// </summary>
private void updateInfo()
{
// Linq to datagridview; display all
var query = from n in dbh.Items select n;
itemDataGridView.DataSource = query.ToList();
}
Entonces, el problema con esto es que cada vez que agrego nueva información y ejecuto esta actualización, el foco de la tabla cambia, lo que significa que si estoy en una fila me cambiará a otra. Y hay un evento relacionado con el cambio de fila, por lo que este evento se ejecuta mientras la lista se mantiene actualizada.
No, pero recuerdo que antes de cambiar a DataGridView
limitado a Linq-to-SQL había un TableAdapter
formado, y en vez de alterar los datos en la base de datos, simplemente insertaba usando este TableAdapter
que refrescaría automáticamente DataGridView
de la manera adecuada.
Entonces, me pregunto si hay alguna otra forma en la que debería estar haciendo esto para cada refresco suave .
Parece que está intentando modificar los datos fuera de su aplicación y luego hacer que su DataGridView muestre esos cambios.
No conozco una forma de sondear automáticamente la base de datos y luego hacer que DataGridView solo actualice esa fila para mostrar una actualización más fluida. Para actualizar, siempre he vuelto a vincular DataGridView al DataSource que contiene TableAdapter Select, Update y DeleteCommand (SQL pero similar). No creo que esto sea un problema LINQ.
Independientemente de cómo esté actualizando su tabla subyacente, habrá una actualización de algún tipo a menos que esté editando un solo campo y luego publique las actualizaciones más adelante.
Supongo que estás usando WinForms y luego no hay alternativa. Si está utilizando WPF, sin embargo, es posible, utilizando las técnicas de enlace que existen en WPF. Sin embargo, no sé los detalles.
Como ya han señalado otros, su problema no está relacionado con Linq2Sql per se, sino con la forma en que DataGridView
maneja las fuentes de datos de los objetos.
Una forma de evitar la fila seleccionada perdida es ordenar la colección a la que se está vinculando y seleccionar mediante programación la fila seleccionada previamente después de la actualización.