Gridview and FileUpload ItemTemplate

  • Thread starter Thread starter Paul
  • Start date Start date
P

Paul

I have a gridview with 2 columns.

One column is a BoundColumn to a part number (string).
One column is an ItemTemplate with a FileUpload control.

There can be multiple rows (i.e. part numbers) in the gridview.

The user attaches a file for each part number / row.

The user clicks a button after attaching all the needed files.

I am having a problem accessing the FileUpload properties after the button's
OnClick event.

I have looked at the FindControl method, but I am having a hard time
determining the correct control name.

To make things more complicated, I am also using master pages, which modify
the control's name based on the number of rows in the gridview.

Can anyone point me to an example of this scenario?

TIA

Here is the gridview code:

<asp:GridView ID="gv_vendor_quotes" runat="server"
AutoGenerateColumns="False" CssClass="gv">
<HeaderStyle CssClass="gv_header" />
<AlternatingRowStyle CssClass="gv_alt_row" />
<Columns>
<asp:BoundField DataField="line_part_num" HeaderText="SO Part">
<ItemStyle HorizontalAlign="Left" />
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField HeaderText="Vendor Quote Document">
<ItemStyle HorizontalAlign="Center" />
<HeaderStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:FileUpload ID="fu_vendor_quote" runat="server"
/><asp:HyperLink ID="lnk_vendor_quote" runat="server" Target="_blank" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
 
Hi,

my post should help you understand the control hierarchy

Understanding the naming container hierarchy of ASP.NET databound controls
http://aspadvice.com/blogs/joteke/a...-hierarchy-of-ASP.NET-databound-controls.aspx

Essential is to realize that GridView and its rows are naming containers
which provide a new naming scope for controls hey contain (allowing the
controls to have duplicate IDs as long as IDs are unique in the local naming
scope). But the rendered ID matches controls ClientID property and name
attribute to UniqueID property , but the ID is still ID in the local scope.

E.g you can for example loop through GridView's Rows, locate the FileUpload
on every row, and do what you need to do with it

For Each gvRow As GridViewRow in gv_vendor_quotes.Rows

Dim fu_vendor_quote As FileUpload =
CType(gvRow.FindControl("fu_vendor_quote"), FileUpload)
'Here do what you need to do, you can also get row-level data from
gvRow, access DataKeys etc

Next
 
Hi Paul,
Paul said:
I have a gridview with 2 columns.

One column is a BoundColumn to a part number (string).
One column is an ItemTemplate with a FileUpload control.

There can be multiple rows (i.e. part numbers) in the gridview.

The user attaches a file for each part number / row.

The user clicks a button after attaching all the needed files.

I am having a problem accessing the FileUpload properties after the
button's
OnClick event.

I have looked at the FindControl method, but I am having a hard time
determining the correct control name.
The FindControl method must be called with the Parent control... So if you
write Page.FindControl("FileUpload1") , it returns something if the
FileUpload is inside the Page. But as you use a MasterPage, it is not the
case.

You should load your html aspx page, then take a look at the source page.
You will then find something like "<div
id="TabContainer1_TabPanel1_UpdatePanel1">, which tells you that the
UpdatePanel1 control is inside the TabPanel1 control, which is inside the
TabContainer1 control, which is inside the Page. To get a handle on
TabPanel1, you should write:

TabContainer tabc = Page.FindControl ("TabContainer1") as TabContainer;
TabPanel tabp = tabc .FindControl ("TabContainer1") as TabPanel;

Hope it helps
 
Back
Top