Hola gente! espero que estén igual de contentos que yo este día viernes!. Bueno, la verdad yo no estaba contento producto de un problema con un GridView, cuyo DataSource traía campos de forma dinámica según los parámetros que se le pasaban al procedimiento. Si bien eso es bastante fácil de hacer (AutoGenerateColumns="True"), el problema se presento cuando mi Jefe me dice... "Raymond, ¿es muy complejo hacer que los sólo valores queden alineados a la derecha y el resto a la izquierda?; a lo que yo respondo con toda seguridad "No! es bastante sencillo". Bueno, la verdad es que si los campos no fueran dinámicos hubiese sido bastante sencillo, sin embargo éste no era el caso.
Sin mas preámbulos vamos al caso en concreto. Tenemos un procedimiento que dependiendo de sus parámetros el resultado puede tener de 2 a 5 columnas.
La condición de las columnas a mostrar estará dada por una serie de CheckBox, donde un Button gatillará una verificación de estado, y dependiendo de si este se encuentra seleccionado, agregaremos nuestro Boundfield al GridView. Más o menos así:
Primero nuestro GridView en la página con un lindo diseño en tonos verdes:
<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True" CellPadding="4"
ForeColor="#333333" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False" >
<AlternatingRowStyle BackColor="#EBF6F0" />
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#009452" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#009452" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#D1EBE0" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
Lo importante es que las columnas no se generen de forma automática.
Finalmente nuestro evento de click:
protected void Button1_Click(object sender, CommandEventArgs e)
{
if (CheckBox1.Checked)
{
BoundField bFld = null;
bFld = new BoundField();
bFld.DataField = "Campo1";
bFld.HeaderText = "El super primer campo!";
GridView1.Columns.Add(bFld);
}
if (CheckBox2.Checked)
{
BoundField bFld = null;
bFld = new BoundField();
bFld.DataField = "Campo2";
bFld.HeaderText = "El super segundo campo!";
GridView1.Columns.Add(bFld);
}
/* y así sucesivamente con todos los posibles campos que pueda retornar nuestro procedimiento.*/
}
Y eso sería! Otro TIP de los "fácil y bonito".
Ojala les sirva! y recuerden la publicidad! tengo sed! y es viernes!
No hay comentarios:
Publicar un comentario