Una pregunta relativamente simple. Tengo una vista de tabla de datos, que todo lo que hace es mostrar estadísticas. No hay edición/adición/eliminación de filas. La vista de tabla de datos está vinculada a una lista. Todo lo que quiero lograr es que el usuario pueda ordenar las columnas.Ordenando datagridview datasource en la lista <T> donde T es anónimo
class Market
{
public int Location {get;set;}
public float Value {get;set;}
//...
}
class City
{
public String Name {get;set;}
//...
}
List<Market> _markets;
List<City> _cities;
//Lists are populated.
dataGridView1.DataSource = _markets.Select(market =>
new { _cities[market.Location].Name, market.Value}).ToList();
Como era de esperar, las columnas no son ordenables, pero la información que se muestra es lo que se busca. Mi pregunta es cómo hacer que la ordenación de DataGridView se base en el tipo de columna con la cantidad de código menos complicada y menor, ya que el código se usará varias veces en todo momento.
Esta aplicación solía usar una base de datos que tenía vistas. Estas vistas luego poblaron DataGridViews. Las vistas son todavía alrededor, por lo que una posible solución podría ser:
DataBase.ViewMarketValue temp = new DataBase.ViewMarketValue()
_markets.ForEach(market => temp.AddViewMarketValueRow(_cities[market.Location].Name, market.Value);
dataGridView1.DataSource = temp;
Esto da lugar a la deseada: un DataGridView que tiene toda la información y que se puede ordenar. El único problema es que parece incorrecto usar vistas en este aspecto. ¿Entonces qué debo hacer?
Muy buena solución! Mi única queja (y es pequeña) es que la clasificación no es tan rápida como ideal, pero es tolerable y lo mejor hasta ahora. –
Es lento porque usa el reflejo para obtener el valor de la propiedad. Puede modificar fácilmente la clase PropertyComparer para que genere un delegado cuando se crea y utiliza este delegado en lugar de property.GetValue –
@ThomasLevesque sería genial si pudiera publicar algún fragmento de código para implementar su sugerencia. Gracias – Esen