Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre Rosset

[Resolvido] Evento RowCommand com o Grid dentro de um DataList

Recommended Posts

Boa Tarde iMasters!

 

Tenho um DataList com um GridView dentro, no DataList eu recupero as secoes dos meus produtos e no Grid os produtos referentes a secao do datalist, dentro do grid tenho um buttonfield e na acao do button, preciso dar um response.redirect para outra pagina com o id do produto que esta no grid.

 

parte do codigo:

<asp:DataList ID="DataList_Secoes" runat="server" RepeatDirection="Horizontal" BorderWidth="0px"
            RepeatColumns="3" BorderStyle="None" CellPadding="0" OnItemDataBound="DataList_Secoes_ItemDataBound">
            <ItemTemplate>
                <div class="div_produtos_secao">
                    <div class="div_produtos_cab_lbl">
                        <asp:Label ID="Label_Produtos_Secao_Nome" runat="server" CssClass="lbl_produtos_cab"></asp:Label>
                    </div>
                    <div class="div_produtos_conteudo_grid">
                        <asp:GridView ID="GridView_Produtos" runat="server" AutoGenerateColumns="False" EnableModelValidation="True"
                            ShowHeader="False" Width="304px" OnRowCommand="GridView_Produtos_RowCommand">
                            <Columns>
                                <asp:BoundField DataField="prod_nome" />
                                <asp:ButtonField ButtonType="Image" ImageUrl="~/Images/Produtos/Ico_detalhes.png"
                                    CommandName="Redirect" DataTextField="prod_id" >
                                    <ItemStyle HorizontalAlign="Center" Width="35px" />
                                </asp:ButtonField>
                            </Columns>
                        </asp:GridView>
                    </div>
                    <div class="div_produtos_conteudo_simulador">
                        <asp:HyperLink ID="HyperLink_Produtos_Simulador" runat="server"></asp:HyperLink>
                    </div>
                    <div class="div_produtos_conteudo_foto">
                        <asp:Image ID="Image_Produtos_Secao" runat="server" />
                    </div>
                </div>
            </ItemTemplate>
            <SeparatorTemplate>
                <div class="div_produtos_separa">
                </div>
            </SeparatorTemplate>
        </asp:DataList>

behind:

public void Preenche_DataList(bool status)
    {
        DataSet ds_sec = ob_prod.Retorna_Secao(status);
        DataList_Secoes.DataSource = ds_sec;
        DataList_Secoes.DataBind();
    }

    protected void DataList_Secoes_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lbl_nome = (Label)e.Item.FindControl("Label_Produtos_Secao_Nome");
            Label lbl_desc = (Label)e.Item.FindControl("Label_Produtos_Secao_Desc");
            HyperLink hyp_simulador = (HyperLink)e.Item.FindControl("HyperLink_Produtos_Simulador");
            Image img_sec = (Image)e.Item.FindControl("Image_Produtos_Secao");

            int id = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "sec_id"));
            string nome = DataBinder.Eval(e.Item.DataItem, "sec_nome").ToString();
            string dir_sec = "Conteudo/Secao/";
            string img = DataBinder.Eval(e.Item.DataItem, "sec_img").ToString();

            lbl_nome.Text = nome;


            GridView grv = (GridView)e.Item.FindControl("GridView_Produtos");
            DataSet ds_sec_grid = ob_prod.Retorna_Produtos_Sec(id, true);

           
            if (ds_sec_grid.Tables[0].Rows.Count == 0)
            {
                grv.Visible = false;
            }
            grv.DataSource = ds_sec_grid;
            grv.DataBind();

        }
    }

    protected void GridView_Produtos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Redirect")
        {
            Response.Redirect("~/Produtos_View?=" + "codigo do produto!!!");
        }
    }

no aguardo, abraço a tds!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione um LinkButton nele você consegue criar as URls dinamicamente.

 

Abraços...

 

Bom dia quintelab, nao entendi sua resposta...

tentei assim:

 

<asp:GridView ID="GridView_Produtos" runat="server" AutoGenerateColumns="False" EnableModelValidation="True"
                    ShowHeader="False" Width="304px">
                    <Columns>
                        <asp:BoundField DataField="prod_nome" />
                        <asp:ButtonField ButtonType="Image" ImageUrl="~/Images/Produtos/Ico_detalhes.png"
                            CommandName="Redirect" DataTextField="prod_id">
                            <ItemStyle HorizontalAlign="Center" Width="35px" />
                        </asp:ButtonField>
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:HyperLink ID="HyperLink_Produtos_Prod" ImageUrl="~/Images/Produtos/Ico_detalhes.png"
                                    runat="server" NavigateUrl="~/Produtos_View.aspx?prod_id=<%#DataBinder.Eval(Container.DataItem, "prod_id")%>"></asp:HyperLink>
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Center" Width="35px" />
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

seria isso só que com o link button??

 

abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia colocar o campo de ID do Produto no DatakeyNames do seu GRID.

 

depois no evento RowDataBound você coloca o seguinte código:

        protected void GridView_Produtos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ((ImageButton)e.Row.FindControl("NOME_DO_SEU_BOTAO_REDIRECT_QUE_ESTÁ_NA_GRID")).CommandArgument = e.Row.RowIndex.ToString();
            }
        }

e no evento RowCommand você faz assim:

        protected void GridView_Produtos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Redirect")
            {
                int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[GridView_Produtos.EditIndex]["prod_id"]);
                Response.Redirect("~/Produtos_View?=" + codigoProduto.toString());
            }
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia colocar o campo de ID do Produto no DatakeyNames do seu GRID.

 

depois no evento RowDataBound você coloca o seguinte código:

        protected void GridView_Produtos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ((ImageButton)e.Row.FindControl("NOME_DO_SEU_BOTAO_REDIRECT_QUE_ESTÁ_NA_GRID")).CommandArgument = e.Row.RowIndex.ToString();
            }
        }

e no evento RowCommand você faz assim:

        protected void GridView_Produtos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Redirect")
            {
                int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[GridView_Produtos.EditIndex]["prod_id"]);
                Response.Redirect("~/Produtos_View?=" + codigoProduto.toString());
            }
        }

 

Opsss ...

troca essa linha:

int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[GridView_Produtos.EditIndex]["prod_id"]);

 

por:

int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[Convert.ToInt32(e.CommandArgument)]["prod_id"]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

você poderia colocar o campo de ID do Produto no DatakeyNames do seu GRID.

 

depois no evento RowDataBound você coloca o seguinte código:

        protected void GridView_Produtos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ((ImageButton)e.Row.FindControl("NOME_DO_SEU_BOTAO_REDIRECT_QUE_ESTÁ_NA_GRID")).CommandArgument = e.Row.RowIndex.ToString();
            }
        }

e no evento RowCommand você faz assim:

        protected void GridView_Produtos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Redirect")
            {
                int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[GridView_Produtos.EditIndex]["prod_id"]);
                Response.Redirect("~/Produtos_View?=" + codigoProduto.toString());
            }
        }

 

Opsss ...

troca essa linha:

int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[GridView_Produtos.EditIndex]["prod_id"]);

 

por:

int codigoProduto = Convert.ToInt32(GridView_Produtos.DataKeys[Convert.ToInt32(e.CommandArgument)]["prod_id"]);

 

kauebranco, tentei fazer o que você descreveu, mas o problema eh que eu nao consigo "enxergar" o Grid, pois ele esta dentro de um DataList... teria como fazer com um eval na pagina.aspx no itemTemplate do Grid msm?? pois no behind eu nao consigo enxergar o Grid.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera... consegui fazer funfar aqui...

no Grid, coloquei o seguinte:

<asp:GridView ID="GridView_Produtos" runat="server" AutoGenerateColumns="False" EnableModelValidation="True"
                    ShowHeader="False" Width="304px">
                    <Columns>
                        <asp:BoundField DataField="prod_nome" />
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>                            
                            <a href="Produtos_View.aspx?prod_id=<%# Eval("prod_id") %>">
                                <img src="Images/Produtos/Ico_detalhes.png" style="border-style: none" /></a>                               
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Center" Width="35px" />
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

Muito obrigado a todos que postaram!

Abrço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.