Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
>
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!
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());
}
}>
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"]);
>
>
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.
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!
Adicione um LinkButton nele você consegue criar as URls dinamicamente.
Abraços...