Muchas veces trabajamos con Listas de clases, que contienen otras clases asociadas dentro, o que queremos modificar los valores a mostrar, por ejemplo queremos convertir una propiedad boolean de la clase en un SI/NO. Esto con el proceso automatico del dataset, no se puede hacer. Yo uso este sistema:
{
private void LoadPiezas()//limpiamos el datagriddgPiezas.Columns.Clear();
dgPiezas.AutoGenerateColumns =
false;//vamos creando todas las columnas
idColumn.DataPropertyName = DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();"Id"; //nombre de la propiedadidColumn.HeaderText = "Id"; //nombre de la columna
CodevColumn.DataPropertyName =
CodevColumn.HeaderText =
DescrColumn.DataPropertyName =
DescrColumn.HeaderText =
CantidadColumn.DataPropertyName =
CantidadColumn.HeaderText =
PrecioColumn.DataPropertyName =
PrecioColumn.HeaderText =
MonedaColumn.DataPropertyName =
MonedaColumn.HeaderText =
estadoColumn.DataPropertyName =
estadoColumn.HeaderText =
FechaColumn.DataPropertyName =
FechaColumn.HeaderText =
certificadoColumn.DataPropertyName =
certificadoColumn.HeaderText =
DataGridViewTextBoxColumn CodevColumn = new DataGridViewTextBoxColumn();"Code";"Partnumber";DataGridViewTextBoxColumn DescrColumn = new DataGridViewTextBoxColumn();"Description";"Descripcion";DataGridViewTextBoxColumn CantidadColumn = new DataGridViewTextBoxColumn();"Quantity";"Cantidad";DataGridViewTextBoxColumn PrecioColumn = new DataGridViewTextBoxColumn();"PrecioUnidad";"Precio";DataGridViewTextBoxColumn MonedaColumn = new DataGridViewTextBoxColumn();"moneda";"moneda";DataGridViewTextBoxColumn estadoColumn = new DataGridViewTextBoxColumn();"estado";"estado";DataGridViewTextBoxColumn FechaColumn = new DataGridViewTextBoxColumn();"fechaInicio";"fechaInicio";DataGridViewTextBoxColumn certificadoColumn = new DataGridViewTextBoxColumn();"certificado";"certificado";//las añadimos al datagriddgPiezas.Columns.Add(idColumn);
dgPiezas.Columns.Add(CodevColumn);
dgPiezas.Columns.Add(DescrColumn);
dgPiezas.Columns.Add(CantidadColumn);
dgPiezas.Columns.AddRange(PrecioColumn);
dgPiezas.Columns.AddRange(MonedaColumn);
dgPiezas.Columns.AddRange(estadoColumn);
dgPiezas.Columns.AddRange(certificadoColumn);
//asociamos el datagrid a la lista de clase, en este caso un listado de piezasdgPiezas.DataSource = oEnvio.PiezasEnviadas;
}
Un blog donde poder escribir, trucos, ideas, desarrollos, soluciones de mi dia a dia como desarrollador de .NET
viernes, 24 de diciembre de 2010
martes, 21 de diciembre de 2010
Linq Extension
Ahora mismo estoy en un proyecto donde toda la capa de base de datos usamos LINQ to SQL, pero nos encontramos que una de las partes del proyecto tiene una gestion de reports completamente aleatoria basada en Vistas de SQL creadas. Lo unico que sabemos de antemano es el nombre de la vista.
Haciendo una sentencia sql a traves de un string generado "on the fly" con el nombre de la vista a consultar, se soluciona todo, pero eso tenia que integrarse en nuestro modelo de datos LINQ.
LINQ por defecto puedes ejecutar una sql, pero le tienes que pasar una clase mapeada donde insertar los valores, cosa que yo no queria ya que las vistas son totalmente dinamicas.
Asi que buscando en internet encontre esta web donde habia un metodo extensor de linq, yo lo readapte para que ya me diera un datatable directamente asi añadirlo directamente al gridview
Este es el metodo extensor:
public static DataTable ExecuteQuery(this DataContext ctx, string query)
Haciendo una sentencia sql a traves de un string generado "on the fly" con el nombre de la vista a consultar, se soluciona todo, pero eso tenia que integrarse en nuestro modelo de datos LINQ.
LINQ por defecto puedes ejecutar una sql, pero le tienes que pasar una clase mapeada donde insertar los valores, cosa que yo no queria ya que las vistas son totalmente dinamicas.
Asi que buscando en internet encontre esta web donde habia un metodo extensor de linq, yo lo readapte para que ya me diera un datatable directamente asi añadirlo directamente al gridview
Este es el metodo extensor:
public static DataTable ExecuteQuery(this DataContext ctx, string query)
{
DataTable dt = new DataTable();
using (DbCommand cmd = ctx.Connection.CreateCommand())
{
cmd.CommandText = query;
ctx.Connection.Open();
using (DbDataReader rdr =cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(rdr);
}
}
return dt;
}
Este es el metodo con el que se le llama:
DataTable query = db.ExecuteQuery(sql);
Este es el metodo con el que se le llama:
DataTable query = db.ExecuteQuery(sql);
Suscribirse a:
Entradas (Atom)