I have a DetailsView that I am using to edit a GridView. When I click the edit button, the DetailsView opens and is DataBound with the values from the selected GridView Row.
My problem is after making the changes in the DetailsView, I cannot access the new values to add to my update parameters in the code-behind.
I would appreciate any advice or suggestions, thank you.
Here is the code I have so far:
protected void gvEntries_SelectedIndexChanged(object sender, EventArgs e)
{
int index = gvEntries.SelectedIndex;
entryID = gvEntries.DataKeys[index].Value.ToString();
string queryString = ("Select [entryFunctionName], [entrySegment], [entryLOB]," +
"[entryTime], [entryAccountNumber], [entryProgramRevOrg], [entryQuantity], " +
"[entryNotes] From tblEntries Where entryEntryID = " + entryID);
dtEdit = DDLGetData(queryString);
DetailsView1.ChangeMode(DetailsViewMode.Edit);
DetailsView1.DataSource = dtEdit;
DetailsView1.DataBind();
ModalPopupExtender1.Controls.Add(editPanel);
ModalPopupExtender1.Show();
}
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
if (e.NewMode == DetailsViewMode.Edit)
{
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
}
else if (e.NewMode == DetailsViewMode.ReadOnly)
{
DetailsView1.ChangeMode(DetailsViewMode.Edit);
}
}
DropDownList ddlfunc = new DropDownList();
DropDownList ddlseg = new DropDownList();
DropDownList ddlProgramRevOrg = new DropDownList();
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
DataRowView row = (DataRowView)((DetailsView)sender).DataItem;
ddlfunc = (DropDownList)((DetailsView)sender).FindControl("ddlfunctions");
ddlfunc.SelectedValue = row[0].ToString();
ddlseg = (DropDownList)((DetailsView)sender).FindControl("ddlSegment");
ddlseg.SelectedValue = row[1].ToString();
ddlProgramRevOrg = (DropDownList)((DetailsView)sender).FindControl("ddlRevOrg");
string programs = "Select * From tblPrograms Where prgInactive = 'False'";
DataTable dtprogram = new DataTable();
dtprogram = DDLGetData(programs);
ddlProgramRevOrg.DataSource = dtprogram;
ddlProgramRevOrg.DataTextField = "prgProgramName";
ddlProgramRevOrg.DataValueField = "prgRevOrg";
ddlProgramRevOrg.DataBind();
ddlProgramRevOrg.SelectedValue = row[5].ToString();
}
}
protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
ddlfunc = (DropDownList)DetailsView1.TemplateControl.FindControl("ddlfunctions");
ddlfunc2 = e.NewValues.ToString();
}
int index = gvEntries.SelectedIndex;
entryID = gvEntries.DataKeys[index].Value.ToString();
String UpdateComm = ("Update [tblEntries] Set [entryFunctionName] = @entryFunctionName Where [entryEntryID] = @entryID");
string connectionString = Configuration.ConnectionString();
string function = DetailsView1.FindControl("ddlfunctions").ToString();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand updatecomm = new SqlCommand(UpdateComm, conn);
updatecomm.Parameters.AddWithValue("@entryFunctionName", function);
updatecomm.Parameters.AddWithValue("@entryID", entryID);
updatecomm.ExecuteNonQuery();
conn.Close();
}
}
protected void OkButton_Clicked(object sender, EventArgs e)
{
DetailsView1.UpdateItem(false);
ModalPopupExtender1.Hide();
BindEntryView();
}
The code provided is only attempting to update one column in the database for simplicity and easier reading.
Does anyone have any suggestions or advice please and thank you?
Here is the detailsview markup:
<asp:DetailsView ID="DetailsView1" runat="server" onmodechanging="DetailsView1_ModeChanging" OnItemUpdating="DetailsView1_ItemUpdating"
DefaultMode="Edit" CssClass="panelStyle" OnDataBound="DetailsView1_DataBound" CausesValidation="false" GridLines="None" AutoGenerateRows="False"><%----%>
<Fields>
<asp:TemplateField HeaderText="Function" >
<EditItemTemplate>
<asp:DropDownList ID="ddlfunctions" runat="server"
DataSource='<%# _functionCollection %>' DataTextField="Display" DataValueField="Name">
</asp:DropDownList>
<br />
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"
Text='<%# Bind("entryFunctionName") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("entryFunctionName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Segment">
<EditItemTemplate>
<asp:DropDownList ID="ddlSegment" runat="server"
DataSource="<%# _tempSegmentCollection %>" DataTextField="Display" DataValueField="Name">
<asp:ListItem>Master</asp:ListItem>
<asp:ListItem>MCP</asp:ListItem>
<asp:ListItem>Misc.</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("entrySegment") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.entrySegment") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="LOB">
<EditItemTemplate>
<asp:DropDownList ID="ddlLOB" DataSource="<%# _tempLOBCollection %>" DataTextField="Name"
DataValueField="Name" runat="server">
<asp:ListItem>Workers Compensation</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("entryLOB") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("entryLOB") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Time">
<EditItemTemplate>
<asp:TextBox ID="tbTime" runat="server" Text='<%# Bind("entryTime") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("entryTime") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("entryTime") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Account Number">
<EditItemTemplate>
<asp:TextBox ID="tbAcctNmbr" runat="server"
Text='<%# Bind("entryAccountNumber") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox5" runat="server"
Text='<%# Bind("entryAccountNumber") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("entryAccountNumber") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Program">
<EditItemTemplate>
<asp:DropDownList ID="ddlRevOrg" runat="server" ><%--DataSource="<%# _programCollection %>" DataTextField="Name" DataValueField="Name"--%>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox6" runat="server"
Text='<%# Bind("entryProgramRevOrg") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("entryProgramRevOrg") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<EditItemTemplate>
<asp:TextBox ID="tbQuantity" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label7" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Notes">
<EditItemTemplate>
<asp:TextBox ID="tbNotes" runat="server" Text='<%# Bind("entryNotes") %>'
TextMode="MultiLine" Height="75px"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("entryNotes") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label8" runat="server" Text='<%# Bind("entryNotes") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="false" />
</Fields>
</asp:DetailsView>