Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

llenar un gridview desde un datatable

1,348 views
Skip to first unread message

arturohm

unread,
Mar 18, 2009, 8:46:30 AM3/18/09
to
Buenos dias,

una consulta, utillizo este codigo para llenar una datalist con los
nombres de archvivos de un directorio:

string varPath = "";
varPath = Server.MapPath("../DownloadFiles");
lblRuta.Text = varPath;

DirectoryInfo di = new DirectoryInfo(varPath);

FileInfo[] fi = di.GetFiles();

// Print out the names of the files in the current directory.
foreach (FileInfo fiTemp in fi)
{
//Console.WriteLine(fiTemp.Name);
ListBox1.Items.Add(fiTemp.Name);
ListBox1.Items.Add(fiTemp.Length.ToString());
ListBox1.Items.Add(fiTemp.CreationTime.ToString());
ListBox1.Items.Add(fiTemp.Extension);
}

Ahora, yo quiero llenar un gridview con la misma informacion, hice
esto pero no se muestra nada:

DataTable dt = new DataTable();
dt.Columns.Add("ARCHIVO");
dt.Columns.Add("SIZE");
dt.Columns.Add("FECHA");
dt.Columns.Add("EXTENSION");

foreach (FileInfo fiTemp in fi)
{
foreach (DataRow dr in dt.Rows)
{

dr["ARCHIVO"] = fiTemp.Name;
dr["SIZE"] = fiTemp.Length;
dr["FECHA"] = fiTemp.CreationTime.ToString();
dr["EXTENSION"] = fiTemp.Extension;
dt.Rows.Add(dr);
}

}

gvwFiles.DataSource = dt;
gvwFiles.DataBind();

que esta mal??? aunque al generar no hay ningun error no se ve el
gridview.
que es mas eficiente un datatable o emplear una lista generica????

Gracias por el apoyo que puedan brindarme.

Matias Iacono

unread,
Mar 18, 2009, 10:01:02 AM3/18/09
to
Sin hacer la prueba, lo primero que veo es el ForEach del DataTable.

foreach (DataRow dr in dt.Rows)

Si bien, conceptualmente no generaría error, el DataTable en este momento no
posee ninguna fila, por lo que nunca entraria en el bucle.

Esto deberías cambiarlo por lo siguiente:

foreach (FileInfo fiTemp in fi)
{

DataRow dr = dt.NewRow


dr["ARCHIVO"] = fiTemp.Name;
dr["SIZE"] = fiTemp.Length;
dr["FECHA"] = fiTemp.CreationTime.ToString();
dr["EXTENSION"] = fiTemp.Extension;
dt.Rows.Add(dr);
}

Por otro lado, con respecto a la segunda pregunta, personalmente usaría una
lista generica, con objetos que representen la entidad a manejar. En este
caso, estas sub utilizando las caracteristicas del DataTable, por lo que
crear un elemento de este tipo para solo asignarle filas y columnas
representa un consumo de recursos innecesarios.

Saludos.
--
--
Matías Iacono
Microsoft MVP - Microsoft MCTS
Orador Regional INETA
http://www.preguntaalexperto.net
http://mvpfiles.spaces.live.com

arturohm

unread,
Mar 19, 2009, 8:08:35 AM3/19/09
to
Gracias Matias por el apoyo, al final opte por la lista generica,
implemente un entidad, un DAL y un BO, para manejar la lista generica,
mi DAL quedo asi:

public List<GrabacionesBE> ListarFiles(String varPath)
{
try
{


DirectoryInfo di = new DirectoryInfo(varPath);

FileInfo[] fi = di.GetFiles();

List<GrabacionesBE> lstFiles = new List<GrabacionesBE>
();
GrabacionesBE objFiles;


foreach (FileInfo fiTemp in fi)
{

objFiles = new GrabacionesBE();
objFiles.Nombre = fiTemp.Name;
objFiles.Size = fiTemp.Length;
objFiles.FechaCreacion = fiTemp.CreationTime;
objFiles.Type = fiTemp.Extension;
lstFiles.Add(objFiles);
}
return lstFiles;
}
catch (SqlException ex)
{
{ throw ex; }
}
catch (Exception ex)
{
{ throw ex; }
}
finally
{
}
}

mi BO:

public List<GrabacionesBE> ListarFiles(String varPath)
{
try
{
return new GrabacionesDA().ListarFiles(varPath);
}
catch (Exception)
{
throw;
}
}

mientras que en el formulario:

string varPath = "";
varPath = Server.MapPath("../DownloadFiles");

//lblRuta.Text = varPath;

GrabacionesBO listaFiles = new GrabacionesBO();
List<GrabacionesBE> listadoFiles = new List<GrabacionesBE>();
listadoFiles = listaFiles.ListarFiles(varPath);

gvwFiles.DataSource = listadoFiles;
gvwFiles.DataBind();

El codigo mostrado funciona muy bien, pero habria algo mas para
mejorarlo, a fin de emplear mejores practicas, la entidad la genere
por medio del Enterprise Library, pero el DAL, lo personalize ya que
el Ent. Lib. genera una estructura mas compleja para el DAL.

Nuevamente gracias por el apoyo.

0 new messages