Utilización de linq con datagrid

Espero que estés bien.
Tengo un problema con el linq el datagrid. Te pongo mi código:
var QueryLlenaGridPersonal = (from c in BaseSeebioEstadistica.ControlAsistencias wherec.Id_Police == int.Parse(txtNumEmpleadoTabElemento.Text.Trim()) select new { c.Folio,c.Deporte, c.Dia, c.FechaAlta, c.HoraEntrada, c.HoraSalida });
int[] FoliosParallenar= new int[QueryLlenaGridPersonal.Count()];
int i = 0;
foreach (var hugo in QueryLlenaGridPersonal)
{
if (this.FechaValidaAllTabs(hugo.FechaAlta))
{ FoliosParallenar = hugo.Folio; i++; }
}
FoliosParallenar = (int[]) aRedimensionar(FoliosParallenar, i - 1);
var QueryDefinitivo = (from c in FoliosParallenar join def inBaseSeebioEstadistica.ControlAsistencias on c equals def.Folio
select new { def.Deporte, def.Dia, def.FechaAlta, def.HoraEntrada, def.HoraSalida}).Distinct();
DataGridPorElementoTabElemento.DataSource = QueryDefinitivo;
DataGridPorElementoTabElemento.Refresh();

1 respuesta

Respuesta
1
¿Puedes indicarme que error te da al compilar este código? ¿O te falla en tiempo de ejecución?
Hola, si, una disculpa, era a las carreras y no puse cual era mi problema.
El problema era que el data grid no mostraba ningún dato. La solución es
DataGridPorElementoTabElemento.DataSource = QueryDefLlenaData.ToList();
DataGridPorElementoTabElemento.AutoGenerateColumns = true;
DataGridPorElementoTabElemento.Refresh();
Con eso ya desplegaba todo los datos correctos. Ahora surge otro problema, como tener acceso a las celdas del data grid? no he encontrado forma.Utilizo el C# 2008. Gracias, cualquier ayuda
¿Con acceder a las celdas del Grid a qué te reiferes? ¿A poder editarlas?
Para ello yo te recomendaría que añadieras un botón "Editar" y le pongas como CommandArgument el ID de la fila.
Luego, en el click de dicho botón, puedes recuperar ese valor y con él los datos del objeto para, por ejemplo, rellenar unos textBoxes y poder hacer modificaciones o eliminarlo de la base de datos.
Hola, eso como se hace?
mi data grid es:
DataGridPorElementoTabElemento
le agrego
DataGridPorElementoTabElemento.columns.
y solo puedo ver algunos métodos, pero propiedades para cambiar el tamaño de la columna no, lo mismo con las Rows,  no como puedo tener acceso a ellas. He encontrado ejemplos que indican:
DataGridPorElementoTabElemento.columns(0) según así tengo acceso a la columna uno pero no, en el C# 2008 no aparece nada.
Cual quier ayuda gracias
Necesito saber si estás trabajando en web (ASP .NET) o en local (Win Forms) para poder ayudarte ya que lo que quieres hacer se hace diferente en cada sistema.
Hola, gracias. si es win forms,  por favor
Como estás autogenerando las columnas en tiempo de ejecución no puedes acceder a las mismas desde código.
Te recomiendo que, en lugar de generarlas desde código, las crees de antemano desde el Diseñador de WinForms. Pulsa en el Grid > Propiedades > Columnas y vas creando una a unas las columnas cuyo DataField coincida con el nombre del campo que quieras mostrar.
Luego puedes añadir una columna de tipo ButtonColumn y en el evento "ItemCommand" obtener la row que ha provocado el evento y sacar los datos de la misma.
Hola, disculpa pero soy muy testarudo y no entiendo. Podrías hacerme el favor de colocar un ejemplo, solo para ilustrar por favor
Primero usa el código que tienes ahora y quita:
DataGridPorElementoTabElemento.AutoGenerateColumns = true;
Después, desde el diseñador de Windows Forms (en el que ves los elementos y puedes arrastrar nuevos y cambiar sus propiedades) pulsas en el Grid > Propiedades (F4) > Columns y vas añadiendo una column por cada campo que quieras mostrar (el DataField debe de ser el nombre de la propiedad a mostrar, por ejemplo, si vas a mostrar un campo de BD llamada "Nombre", deberías poner en el DataField de la columna el valor "Nombre")
Con esto ya tendrás el Grid mostrando datos sin el AutoGenerateColumns.
Ahora vamos a crear una columna de tipo "ButtonColumn" para que cuando se pulse obtengamos el valor de la fila pulsada y podamos, por ejemplo, pasársela a un formulario para editar.
Para crear la nueva columna vamos de nuevo al diseñador de WinForms y volvemos al dialogo para añadir columnas y creamos una nueva de tipo "ButtonColumn".
Ahora vamos a escribir el código que se ejecutará al hacer click. Hay muchas opciones para hacer esto pero puedes usar directamente el evento "CellContentClick" del DataGrid controlando sobre que columna se ha hecho click y escribir un código similar a este:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex ==1) //La primera columna es la 0. En este ejemplo se asume que hay solo dos columnas: una de texto y la segunda es la del botón
{
MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());//Este código mostraría el valor de la primera celda de la fila en la que hemos hecho click
}
}
Espero que con esto tengas una idea sobre como trabajar con datos en un DataGrid.
Si te sirvio de ayuda por favor finaliza y puntúa la pregunta.
En caso contrario, si tienes cualquier duda, indícamelo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas