Me he topado con un problema, el cual era generar un gridView de manera dinámica desde el codebehind con C#. El problema no fué crear el gridView como tal sino la creación de las columnas personalizadas.
Googleando un poco me encontré con diferentes tutoriales, en los cuales saqué varias ideas, la manera de resolverlo fué la siguiente:
//Creamos nuestro gridView
GridView gv1 = new GridView();
//Llenamos nuestro gridView mediante un DataSet previamente creado.
gv1.DataSource = ds;
//Ponemos la propiedad AutoGenerateColumns en False,
//ya que nosotros las crearemos
gv1.AutoGenerateColumns = false;
//Creamos las columnas dinámicamente,
//en mi caso tenemos una lista con las columnas.
for (int i = 0; i < report.FieldsInfo.Count; i++)
{
//Objeto Columna:
BoundField ColumnBound;
//Crear Columna:
ColumnBound = new BoundField();
ColumnBound.DataField = report.FieldsInfo[i].DATAFIELD.Trim();
ColumnBound.HeaderText = report.FieldsInfo[i].Title1.Trim();
gv1.Columns.Add(ColumnBound);
}
Espero que les sea de utilidad, estaré posteando algunas soluciones a problemas no frecuentes.
RSS feed para los comentarios de esta entrada. TrackBack URI
Todos los derechos reservados. Tecnologia.
y el codigo del lado del lado del aspx lo dejas como?.. creas solo el grid vacio sin columnas?
salu2
Comentario por chow — July 25, 2011 #
Me ha sido de gran utilidad pero ahora deseo agregar un objeto como un linkbutton o cun ChekBox a esa grilla, igualmente creado desde C#, le agradecería si sabe como hacerlo ya que la verdad he llegado a la creacion del TemplateField desde el mismo C#, luego llamar el ItemTemplate pero no he logrado agregar el control que previamente cree. Algo asi:
int cantcol = dts.Tables[0].Columns.Count;
for (int i = 0; i < cantcol; i++)
{
BoundField ColumBound;
ColumBound = new BoundField();
ColumBound.DataField = dts.Tables[0].Columns[i].ToString();//dts.Tables[0].Rows[0][i].ToString();
if (dts.Tables[0].Columns[i].ToString() == "nombres")
{
LinkButton linkbtn = new LinkButton();
linkbtn.Text = "linkbot de prueba2";
linkbtn.ID = "lnktest";
linkbtn.CommandArgument = "Comando";
linkbtn.CommandName = "cmd name";
linkbtn.Command += new CommandEventHandler(lnkbtncommand);
TemplateField tempfield = new TemplateField();
tempfield.InsertItemTemplate.InstantiateIn(linkbtn);
gdv.Columns.Add(tempfield);
//tempfield.ItemTemplate.InstantiateIn = ;
}
Comentario por JAM — January 19, 2012 #