Reusing same DetailsView for both Inserting and Editing


D

David Ching

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
 
Ad

Advertisements


Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top