Manejo de columnas en DataTable

18/07/2007 - 00:40 por Diego Fdo | Informe spam
Hola Grupo !!



Tengo un datatable, con 3 columnas (A,B,C), una forma con 3 botones lo
que pretendo es mostrar en una grilla las columnas en ordenes distintos a
como haya presionado el botón. Ejemplo:

Si presiono btn1 : se mostraria | B | C | A |

Si presiono btn2 : se mostraria | C | B | A |

Si presiono btn3 : se mostraria | A | B | C |



A modo de prueba solo cree la sintaxis para el botón1, pero veo que cuando
termina la ejecución del evento click, me muestra ABC, como si no hubiese
tenido en cuenta el orden estipulado. El código que uso es el siguiente:

DataTable dtOrder1;
public string thisConnectionString
ConfigurationManager.ConnectionStrings["Employees_ConnectionString"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{


dtOrder1 = new DataTable();
SqlConnection sqlConex = new SqlConnection(thisConnectionString);
SqlDataAdapter daTables = new SqlDataAdapter("Select * from
Employee", sqlConex);
daTabla.Fill(dtOrder1);

grd01.DataSource = dtOrder1;
grd01.DataBind();
}



protected void btn1_Click(object sender, EventArgs e)
{


dtOrder1.Columns[0].SetOrdinal(2);
dtOrder1.Columns[1].SetOrdinal(0);
dtOrder1.Columns[2].SetOrdinal(1);
grd01.DataSource = dtOrder1;
grd01.DataBind();

}

Como podría ajustarlo ?.



Gracias



DiegoG.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
18/07/2007 - 07:16 | Informe spam
¿Cómo tienes configurado en diseño el grd01? Si tienes asignadas columnas
fijas, siempre salen en el orden en que las hayas diseñado, con
independencia de cómo estén en la tabla que le asignes para hacer el
DataBinding.

Aparte de eso, veo otro problema en tu código: Cada vez que el usuario hace
click en el botón, haces DOS VECES el DataBind del grid. Recuerda que en web
forms, a diferencia de win forms, cada vez que haces el submit de la página
se ejecuta el Page_Load, seguido del Boton_Click correspondiente al botón
que originó el submit. Para evitarlo, tendrías que encerrar dentro de un "if
(!Page.IsPostBack)..." la parte del Page_Load que hace el DataBind.


"Diego Fdo" wrote in message
news:
Tengo un datatable, con 3 columnas (A,B,C), una forma con 3 botones lo
que pretendo es mostrar en una grilla las columnas en ordenes distintos a
como haya presionado el botón. Ejemplo:

Si presiono btn1 : se mostraria | B | C | A |

Si presiono btn2 : se mostraria | C | B | A |

Si presiono btn3 : se mostraria | A | B | C |



A modo de prueba solo cree la sintaxis para el botón1, pero veo que cuando
termina la ejecución del evento click, me muestra ABC, como si no hubiese
tenido en cuenta el orden estipulado. El código que uso es el siguiente:

DataTable dtOrder1;
public string thisConnectionString >
ConfigurationManager.ConnectionStrings["Employees_ConnectionString"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{


dtOrder1 = new DataTable();
SqlConnection sqlConex = new SqlConnection(thisConnectionString);
SqlDataAdapter daTables = new SqlDataAdapter("Select * from
Employee", sqlConex);
daTabla.Fill(dtOrder1);

grd01.DataSource = dtOrder1;
grd01.DataBind();
}



protected void btn1_Click(object sender, EventArgs e)
{


dtOrder1.Columns[0].SetOrdinal(2);
dtOrder1.Columns[1].SetOrdinal(0);
dtOrder1.Columns[2].SetOrdinal(1);
grd01.DataSource = dtOrder1;
grd01.DataBind();

}

Como podría ajustarlo ?.

Respuesta Responder a este mensaje
#2 Diego Fdo
18/07/2007 - 15:24 | Informe spam
Hola Alberto

Gracias por responder. Respecto a lo que cuentas:
1. ¿Cómo tienes configurado en diseño el grd01? Si tienes asignadas columnas
fijas, siempre salen en el orden en que las hayas diseñado, con
independencia de cómo estén en la tabla que le asignes para hacer el
DataBinding.
R// solo arrastre un grid y ya... por el code le asigno el datasource, no
tengo columnas asignadas(jejeje...ya habia hecho la prueba y paso lo que
comentaste)

2. ya hice la prueba colocando el :
if (!Page.IsPostBack)
{
grd01.DataSource = dtOrder1;
grd01.DataBind();
} y no funciono... el code quedo asi..

DataTable dtOrder1;
public string thisConnectionString
ConfigurationManager.ConnectionStrings["Employees_ConnectionString"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{
dtOrder1 = new DataTable();
SqlConnection sqlConex = new SqlConnection(thisConnectionString);
SqlDataAdapter daTables = new SqlDataAdapter("Select * from
Employee", sqlConex);
daTabla.Fill(dtOrder1);
if (!Page.IsPostBack)
{
grd01.DataSource = dtOrder1;
grd01.DataBind();
}
}



protected void btn1_Click(object sender, EventArgs e)
{
dtOrder1.Columns[0].SetOrdinal(2);
dtOrder1.Columns[1].SetOrdinal(0);
dtOrder1.Columns[2].SetOrdinal(1);
grd01.DataSource = dtOrder1;
grd01.DataBind();
}
Cualquier idea te agradezco.
Diego G.
"Alberto Poblacion" wrote:

¿Cómo tienes configurado en diseño el grd01? Si tienes asignadas columnas
fijas, siempre salen en el orden en que las hayas diseñado, con
independencia de cómo estén en la tabla que le asignes para hacer el
DataBinding.

Aparte de eso, veo otro problema en tu código: Cada vez que el usuario hace
click en el botón, haces DOS VECES el DataBind del grid. Recuerda que en web
forms, a diferencia de win forms, cada vez que haces el submit de la página
se ejecuta el Page_Load, seguido del Boton_Click correspondiente al botón
que originó el submit. Para evitarlo, tendrías que encerrar dentro de un "if
(!Page.IsPostBack)..." la parte del Page_Load que hace el DataBind.


"Diego Fdo" wrote in message
news:
> Tengo un datatable, con 3 columnas (A,B,C), una forma con 3 botones lo
> que pretendo es mostrar en una grilla las columnas en ordenes distintos a
> como haya presionado el botón. Ejemplo:
>
> Si presiono btn1 : se mostraria | B | C | A |
>
> Si presiono btn2 : se mostraria | C | B | A |
>
> Si presiono btn3 : se mostraria | A | B | C |
>
>
>
> A modo de prueba solo cree la sintaxis para el botón1, pero veo que cuando
> termina la ejecución del evento click, me muestra ABC, como si no hubiese
> tenido en cuenta el orden estipulado. El código que uso es el siguiente:
>
> DataTable dtOrder1;
> public string thisConnectionString > >
> ConfigurationManager.ConnectionStrings["Employees_ConnectionString"].ConnectionString;
>
> protected void Page_Load(object sender, EventArgs e)
> {
>
>
> dtOrder1 = new DataTable();
> SqlConnection sqlConex = new SqlConnection(thisConnectionString);
> SqlDataAdapter daTables = new SqlDataAdapter("Select * from
> Employee", sqlConex);
> daTabla.Fill(dtOrder1);
>
> grd01.DataSource = dtOrder1;
> grd01.DataBind();
> }
>
>
>
> protected void btn1_Click(object sender, EventArgs e)
> {
>
>
> dtOrder1.Columns[0].SetOrdinal(2);
> dtOrder1.Columns[1].SetOrdinal(0);
> dtOrder1.Columns[2].SetOrdinal(1);
> grd01.DataSource = dtOrder1;
> grd01.DataBind();
>
> }
>
> Como podría ajustarlo ?.
>


Respuesta Responder a este mensaje
#3 Alberto Poblacion
18/07/2007 - 19:16 | Informe spam
"Diego Fdo" wrote in message
news:
Cualquier idea te agradezco.



Pues, en principio, el código parece correcto. Lo único que se me ocurre
es que el "SetOrdinal" no esté funcionando como tu y yo creemos que
funciona. Al fin y al cabo, no existía en la versión 1 del Framework, por lo
que los que estamos acostumbrados a trabajar con las funcionalidades que
existían en esa versión aún no lo hemos probado.

Como "chapucilla" para conseguir el efecto deseado, se me ocurre hacer un
"Select col2, col3, col1 ..." en lugar del "Select * ..." (cambiando
dinámicamente el orden de los nombres de las columnas), ya que al fin y al
cabo estás de todas formas haciendo el Select en todos los postbacks.
Respuesta Responder a este mensaje
#4 Diego Fdo
18/07/2007 - 21:22 | Informe spam
Hola, gracias de nuevo por la respuesta. Tendre en cuenta eso que me
comentas. Aunque no abandono la idea del .SetOrdinal.

Gracias.

"Alberto Poblacion" wrote:

"Diego Fdo" wrote in message
news:
> Cualquier idea te agradezco.

Pues, en principio, el código parece correcto. Lo único que se me ocurre
es que el "SetOrdinal" no esté funcionando como tu y yo creemos que
funciona. Al fin y al cabo, no existía en la versión 1 del Framework, por lo
que los que estamos acostumbrados a trabajar con las funcionalidades que
existían en esa versión aún no lo hemos probado.

Como "chapucilla" para conseguir el efecto deseado, se me ocurre hacer un
"Select col2, col3, col1 ..." en lugar del "Select * ..." (cambiando
dinámicamente el orden de los nombres de las columnas), ya que al fin y al
cabo estás de todas formas haciendo el Select en todos los postbacks.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida