Reusing same DetailsView for both Inserting and Editing

Discussion in 'ASP .Net Web Controls' started by David Ching, Aug 30, 2007.

  1. David Ching

    David Ching Guest

    Please forgive the cross-post, but I just found this newsgroup, and I think
    it is more relevant than microsoft.public.dotnet.framework.aspnet.

    Newbie question here. I have a GridView where I show all the records in my
    table. I have Edit links in each row to edit that row, and also a button to
    Insert a new record. In both cases, I'd like to popup a <div> containing a
    DetailsView to specify the record data. The DetailsView has a DefaultMode
    property that can be set to Inserting or Editing, so it seems to be meant to
    be used for both. Yet I have not figured out how to use the same
    DetailsView for both.


    The <div> containing the DetailsView is popped up when the Insert button is
    clicked as per this JavaScript:
    <button
    onclick="document.getElementById('divAdd').style.display='block';return
    false;">

    or when an Edit link is clicked:

    protected void grdMaster_RowCreated(object sender, GridViewRowEventArgs
    e)
    {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    LinkButton lnkEdit = (LinkButton)e.Row.Cells[0].Controls[0];
    lnkEdit.Attributes["onclick"] =
    "document.getElementById('divAdd').style.display='block';return false;";
    }
    }


    The <div> is :

    <div id="divAdd" class="popupWindow">
    <h3>Edit Project</h3>
    <asp:DetailsView
    id="frmAdd"
    DataSourceId="srcProjects"
    DefaultMode="Edit"
    AutoGenerateEditButton="True"
    Runat="server" AutoGenerateRows="False" DataKeyNames="ProjectId">
    <Fields>
    <asp:boundfield DataField="ProjectName" HeaderText="Project Name"/>

    <asp:TemplateField HeaderText="Client Name">
    <ItemTemplate>
    <asp:DropDownList ID="DropDownList1"
    DataSourceID="srcClients"
    DataTextField="ClientName"
    DataValueField="ClientId"
    SelectedValue='<%# Bind("ClientId")%>'
    Runat="server"/>
    </ItemTemplate>
    </asp:TemplateField>

    <asp:boundfield DataField="ProjectPONumber" HeaderText="PO Number"/>
    </Fields>
    </asp:DetailsView>
    </div>


    I have verified that this <div> works for the Edit case! It also works for
    the Insert case, if I change these lines:

    <h3>Edit Project</h3>
    DefaultMode="Edit"
    AutoGenerateEditButton="True"

    to:

    <h3>Add Project</h3>
    DefaultMode="Insert"
    AutoGenerateInsertButton="True"

    But how can I set these programatically depending on whether an Edit link is
    clicked, or the Insert button is clicked? All the examples in the excellent
    "ASP.NET 2.0 Unleashed" by Stephen Walther have 2
    <div>, one for the Edit, and another one for the Insert. But this seems
    wasteful and error-prone because only the above 2 lines are different. Is
    there any way to use just one <div> for both Edit and Insert?

    Thanks a bunch,
    David
     
    David Ching, Aug 30, 2007
    #1
    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. tom c
    Replies:
    0
    Views:
    457
    tom c
    Sep 19, 2006
  2. David Ching
    Replies:
    0
    Views:
    385
    David Ching
    Aug 29, 2007
  3. STom

    Reusing a user control within the same application

    STom, Aug 17, 2003, in forum: ASP .Net Building Controls
    Replies:
    0
    Views:
    117
  4. STom

    Reusing a user control within the same application

    STom, Aug 17, 2003, in forum: ASP .Net Web Controls
    Replies:
    0
    Views:
    99
  5. daniel rich
    Replies:
    5
    Views:
    311
    daniel rich
    Nov 14, 2012
Loading...

Share This Page