Foros del Web » Programando para Internet » ASPX (.net) »

C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Estas en el tema de C# 2.0 - Conocer el INDEX de la ROW de un GridView. en el foro de ASPX (.net) en Foros del Web. Hola buenos días !!! Verán, para saber el indice de la fila de un GRIDVIEW tengo puesto el siguiente código: CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'> Bueno, ...
  #1 (permalink)  
Antiguo 21/06/2007, 05:21
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Hola buenos días !!!

Verán, para saber el indice de la fila de un GRIDVIEW tengo puesto el siguiente código:

CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'>


Bueno, este valor lo uso para ir al indice del DataRow del DataTable enlazado con el GridView, pero claro, el problema está en que si ordenado el GridView por un campo, la Fila 3 del GridView no se corresponderá con la Fila 3 del DataTable (Digo Fila 3 por poner un ejemplo).

Entonces, en vez de poner:
Código:
CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'>
Hay alguna forma de especificar al CommandArgument, que ahi ponga el indice del DataRow del DataTable ??


Por favor, si hay alguna forma les agradecería ENORMEMENTE que me den el código.

Muchas gracias
__________________
Charlie.
  #2 (permalink)  
Antiguo 21/06/2007, 07:23
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Re: C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Hola chcma.
Yo para evitarme esto, siempre he mostrado como primera columna de mi GridView, la clave principal (el ID o el CódigoCliente o como lo tengas), y esa misma columna le hago un visible=false
Luego, volviendo a tu caso, lo que hago en vez de pasar el rowindex del Grid, lo que paso es el dato de esa columna, que no está visible, pero si puedes acceder a ella. De esta forma no hay pie a ningún error, puesto que te aseguras que estás referenciando la línea correcta.
A ver si te sirve.
Saludos.
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 21/06/2007, 09:45
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Re: C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Ya amigo, entiendo. Pero en mi caso eso no me sirve, ya que no tengo ID por una serie de motivos.

No obstante, muchas gracias amigo. Seguiré buscando para ver si consigo como meter el Indice del Row en el GridView.

Un saludo.
__________________
Charlie.
  #4 (permalink)  
Antiguo 21/06/2007, 10:14
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Re: C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Utilizando el evento GridView1_RowCommand
Código:
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
            Font-Names="Verdana" Font-Size="10pt" ForeColor="#333333" GridLines="None" OnRowCommand="GridView1_RowCommand">
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("IdUsuario") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Nombre" HeaderText="Nombre del usuario" />
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%# Bind("IdUsuario") %>'
                            CommandName="Select" Text="Select"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        </asp:GridView>
CODIGO C#

Código:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
            //Carga de datos.. 
            //Simulando que cargo los datos aqui
            DataTable table = new DataTable("Usuarios");
            table.Columns.Add(new DataColumn("IdUsuario", typeof(System.Int32)));
            table.Columns.Add(new DataColumn("Nombre", typeof(System.String)));

            DataRow dr = table.NewRow();
            dr["IdUsuario"] = 1;
            dr["Nombre"] = "Stream 1";
            table.Rows.Add(dr);

            dr = table.NewRow();
            dr["IdUsuario"] = 5;
            dr["Nombre"] = "Stream 5";
            table.Rows.Add(dr);

            dr = table.NewRow();
            dr["IdUsuario"] = 10;
            dr["Nombre"] = "Stream 10";
            table.Rows.Add(dr);

            GridView1.DataSource = table;
            GridView1.DataBind();
        }
    }


    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        { 
            //carga los datos con el 
            //e.CommandArgument 
            int IdUsuario = Convert.ToInt32(e.CommandArgument);
            //carga datos del usuario con el IdUsuario
        }
    }
Espero te sirva, abajo te posteo otra manera..
Salu2
  #5 (permalink)  
Antiguo 21/06/2007, 10:18
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
Re: C# 2.0 - Conocer el INDEX de la ROW de un GridView.

Utilizando el evento GridView1_SelectedIndexChanging

Código:
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
            Font-Names="Verdana" Font-Size="10pt" ForeColor="#333333" GridLines="None" OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("IdUsuario") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Nombre" HeaderText="Nombre del usuario" />
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%# Bind("IdUsuario") %>'
                            CommandName="Select" Text="Select"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        </asp:GridView>
Codigo C#
Código:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
            //Carga de datos.. 
            //Simulando que cargo los datos aqui
            DataTable table = new DataTable("Usuarios");
            table.Columns.Add(new DataColumn("IdUsuario", typeof(System.Int32)));
            table.Columns.Add(new DataColumn("Nombre", typeof(System.String)));

            DataRow dr = table.NewRow();
            dr["IdUsuario"] = 1;
            dr["Nombre"] = "Stream 1";
            table.Rows.Add(dr);

            dr = table.NewRow();
            dr["IdUsuario"] = 5;
            dr["Nombre"] = "Stream 5";
            table.Rows.Add(dr);

            dr = table.NewRow();
            dr["IdUsuario"] = 10;
            dr["Nombre"] = "Stream 10";
            table.Rows.Add(dr);

            GridView1.DataSource = table;
            GridView1.DataBind();
        }
    }

    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        GridViewRow dr = this.GridView1.Rows[e.NewSelectedIndex];
        LinkButton LinkButton1 = (LinkButton)dr.Cells[2].FindControl("LinkButton1");

        int IdUsuario = Convert.ToInt32(LinkButton1.CommandArgument);
        //carga datos del usuario con el IdUsuario

    }
Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:07.