Gridview and FileUpload ItemTemplate

Discussion in 'ASP .Net' started by Paul, May 29, 2008.

  1. Paul

    Paul Guest

    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>
     
    Paul, May 29, 2008
    #1
    1. Advertising

  2. Paul

    Teemu Keiski Guest

    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

    --
    Teemu Keiski
    AspInsider, ASP.NET MVP
    http://blogs.aspadvice.com/joteke
    http://teemukeiski.net


    "Paul" <> wrote in message
    news:...
    >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>
     
    Teemu Keiski, May 29, 2008
    #2
    1. Advertising

  3. Paul

    PhilTheGap Guest

    Hi Paul,
    "Paul" <> a écrit dans le message de
    news:...
    >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
     
    PhilTheGap, May 29, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Bennett Haselton
    Replies:
    1
    Views:
    5,341
    Joe Fallon
    Sep 24, 2004
  2. ABC
    Replies:
    1
    Views:
    955
    Patirck Ige
    Oct 7, 2005
  3. =?Utf-8?B?T3Bh?=
    Replies:
    3
    Views:
    2,186
    =?Utf-8?B?T3Bh?=
    Nov 1, 2006
  4. Mogens Nielsen - Elbek & Vejrup A/S

    ObjectDataSource, GridView and ItemTemplate

    Mogens Nielsen - Elbek & Vejrup A/S, Mar 23, 2006, in forum: ASP .Net Web Controls
    Replies:
    4
    Views:
    386
    Mogens Nielsen - Elbek & Vejrup A/S
    Mar 24, 2006
  5. theWizard1

    Gridview Headers for ItemTemplate and EditTemplate

    theWizard1, Sep 15, 2006, in forum: ASP .Net Web Controls
    Replies:
    0
    Views:
    757
    theWizard1
    Sep 15, 2006
Loading...

Share This Page