Inquiridor
Acessar Control dentro do PlaceHolder

Pergunta
-
Pessoal, bom dia. Tenho um placeholder em minha pagina e preciso que, dependendo de uma condição, ele seja fileupload, ou simplesmente um label com algo escrito, o código está assim:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
PlaceHolder p = e.Row.FindControl("PlaceHolder1") as PlaceHolder;
System.Web.UI.WebControls.Label d = e.Row.Cells[1].FindControl("lblTitulo") as System.Web.UI.WebControls.Label;
if (d.Text == "CONTRATO")
{
FileUpload fl = new FileUpload();
p.Controls.Add(fl);
}
else
{
System.Web.UI.WebControls.Label l = new System.Web.UI.WebControls.Label();
l.Text = "Arquivo Comum";
p.Controls.Add(l);
}
}
}
}
Até então, tudo muito correto, porém, quando eu chamo o evento do click do meu botão para salvar no banco, ele da problema:protected void Button2_Click(object sender, EventArgs e)
{
using (Context ctx = new Context())
{
foreach (GridViewRow row in GridView1.Rows)
{
System.Web.UI.WebControls.Label idL = row.Cells[0].FindControl("lblId") as System.Web.UI.WebControls.Label;
PlaceHolder ph = (PlaceHolder)row.FindControl("PlaceHolder1");
FileUpload fl = (FileUpload)ph.FindControl("fl");
int id = Convert.ToInt32(idL.Text);
var obj = ctx.Arquivos.Where(x => x.ArquivosId== id).First();
//obj.Url = fl.PostedFile.ToString();
ctx.SaveChanges();
}
}
}
EM NEGRITO: ele não consegue encontrar fileupload de forma alguma, e eu ja testei inumeras vezes, com breakpoint, e ele adiciona no placeholder corretamente, mas na hora de rodar, ele vem como "Null"... no caso, o FileUpload dentro do placeholder... ("fl")... ALguma ideia que possa auxiliar ???
Todas as Respostas
-
-
-
Não meu amigo, está em uma outra página, porém utilizo a master page como layout sim... aqui está o código em aspx de minha pagina aonde está localizado o placeholder:
<%@ Page Title="" Language="C#" MasterPageFile="~/Forn.Master" AutoEventWireup="true" CodeBehind="Arquivos_Forn.aspx.cs" Inherits="consultor3.Arquivos_Forn" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>CNPJ</asp:ListItem>
<asp:ListItem>ID</asp:ListItem>
<asp:ListItem>COMPROVANTE</asp:ListItem>
<asp:ListItem>CONTRATO</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Adicionar"
onclick="Button1_Click" /> <br /><br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="3" DataKeyNames="ArquivosId" DataSourceID="SqlDataSource1"
Height="87px" Width="212px" BackColor="#DEBA84" BorderColor="#DEBA84"
BorderStyle="None" BorderWidth="1px" CellSpacing="2"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label id="lblId" text=<%#Eval("ArquivosId") %> runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Arquivos Solicitados/Enviados">
<ItemTemplate>
<asp:Label id="lblTitulo" text=<%#Eval("Titulo") %> runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="STS">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl=<%#Eval("Sts") %>/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Upload">
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Download">
<ItemTemplate>
<asp:LinkButton ID="OnLnkDownload" PostBackUrl=<%#Eval("Url") %> runat="server"
Font-Underline="False" onclick="OnLnkDownload_Click">Download</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FFF1D4" />
<SortedAscendingHeaderStyle BackColor="#B95C30" />
<SortedDescendingCellStyle BackColor="#F1E5CE" />
<SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MCVConnectionString %>"
SelectCommand="SELECT * FROM [Arquivos]"></asp:SqlDataSource>
<br />
<center>
<asp:Button ID="Button2" runat="server" Text="Enviar" BackColor="#0033CC"
ForeColor="White" Width="74px" onclick="Button2_Click" /></center>
</asp:Content>
-
-
-
if (e.Row.RowType == DataControlRowType.DataRow)
{
PlaceHolder p = e.Row.FindControl("PlaceHolder1") as PlaceHolder;
System.Web.UI.WebControls.Label d = e.Row.Cells[1].FindControl("lblTitulo") as System.Web.UI.WebControls.Label;
if (d.Text == "CONTRATO")
{
FileUpload fl = new FileUpload();
p.Controls.Add(fl);
}
else
{
System.Web.UI.WebControls.Label l = new System.Web.UI.WebControls.Label();
l.Text = "Arquivo Comum";
p.Controls.Add(l);
} -
Entendi,
faça dessa maneira para pegar o controle dentro de seu Placeholder :
foreach (GridViewRow row in GridView1.Rows) { PlaceHolder ph = (PlaceHolder)row.FindControl("PlaceHolder1"); if (ph.Controls.Count > 0) { FileUpload fl = ph.Controls.OfType<FileUpload>().FirstOrDefault(); //resto de seu codigo... } }