4:13 0 0
Obtener el nombre de las columnas en un DataTable o DataView

Obtener el nombre de las columnas en un DataTable o DataView

  DrUalcman |  marzo 232017

Hoy tuve un "pequeño" problema. Necesitaba acceder a un DataSet y filtrarlo con un valor para de ese resultado recoger los valores de la consulta. Mi problema era, que la consulta era variable en lo que a campos se refiere, es decir, no siempre eran el mismo numero de campos y aun peor, no siempre eran en el mismo orden.

Para resolver esto se me ocurrio que podria recorrer la consulta y obtener el nombre de los campos, pero la verdad que, por sencillo que pareciera este hecho, me costo un poco mas de lo deseado.

El proceso es:

  1. Se ejecuta la consulta y se almacena en un DataSet.
  2. Se almacena ese data ser en un DataTable.
  3. Se pasa el DataTable a un DataView para poder aplicarle el RowFilter y recoger solo los valores que necesito.

Y es aqui donde comienzaron los problemas. Tras mucho buscar informacion, encontre este post el cual me "abrio los ojos" y se me ocurrio la solucion.
La solucion pasa por:

  1. Contar el numero de columnas.
  2. Recorrer las columnas y obtener el nombre de la columna.

En mi caso, las 2 primeras columnas eran despreciables, asi que en el for comence desde la columna 2, pero como siempre tu adapta el codigo a lo que tu necesites.
Or dejo el codigo tal cual, no le vereis mucho sentido, pero espero que cojais el concepto.


    protected string ShowRate(object vibno)
{
string retorno = string.Empty;

System.Data.DataTable dt = dsRates.Tables[0];
System.Data.DataView dv = dt.DefaultView;
dv.RowFilter = "vibno = " + vibno.ToString();

string nombre = string.Empty;
string rate;

foreach (System.Data.DataRowView item in dv)
{
for (int i = 2; i < dv.Table.Columns.Count; i++)
{
nombre = dv.Table.Columns[i].ColumnName;
try
{
rate = item[nombre].ToString();
}
catch
{
rate = "0";
}
if (nombre != "company" || nombre != "vibno")
retorno += ManejoDatos.GetRate(rate, vibno, "Counters", "

" + nombre + ": " + rate + "

", "RateC", false);
else
retorno += "";
}
}

return retorno;
}
NOTA: el DataSet se carga en otra funcion al principio del procedimiento.

Happy coding ;P

#CSHARP

0 Comentarios

 
 
 

Archivo