Is anyone aware of a bug or am I doing something wrong or blind .... that I am getting two records inserted in db?
<asp:DetailsView ID="DetailsViewInsert" runat="server" Height="50px" Width="100%" DataSourceID="ObjectDataSource1" DataKeyNames="MemoID" InsertRowStyle-BackColor="Azure" AutoGenerateRows="False" DefaultMode="Insert" OnItemCommand="DetailsViewInsert_ItemCommand">
<Fields>
<asp:TemplateField HeaderText="Council Reference">
<ItemTemplate>
<asp:Literal ID="LtrCouncilRef" runat="server" Text='<%# Eval("CouncilRef")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtCouncilRef" runat="server" Text='<%# Bind("CouncilRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Com Reference">
<ItemTemplate>
<asp:Literal ID="LtrComRef" runat="server" Text='<%# Eval("ComRef")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtComRef" runat="server" Text='<%# Bind("ComRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sec Reference">
<ItemTemplate>
<asp:Literal ID="LtrSecRef" runat="server" Text='<%# Eval("SecRef")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtSecRef" runat="server" Text='<%# Bind("SecRef")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="PE Cons">
<ItemTemplate>
<asp:Literal ID="LtrPECons" runat="server" Text='<%# Eval("PECons")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtPECons" runat="server" Text='<%# Bind("PECons")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Department name">
<ItemTemplate>
<asp:Literal ID="LtrDepartment" runat="server" Text='<%# Eval("DepartmentName")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:ObjectDataSource ID="ObjectDataSourceDepartment" runat="server" TypeName="MemorandumBusinessLayer" SelectMethod="GetDepartmentName" CacheExpirationPolicy="Sliding" CacheDuration="20"></asp:ObjectDataSource>
<asp:DropDownList ID="DropDownDept" runat="server" DataSourceID="ObjectDataSourceDepartment" DataTextField="DepartmentName" DataValueField="DeptID" BorderColor="Black" BorderStyle="Solid" BorderWidth="1">
</asp:DropDownList>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:Literal ID="LtrMemoTitle" runat="server" Text='<%# Eval("MemoTitle")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtMemoTitle" runat="server" Text='<%# Bind("MemoTitle")%>' BorderColor="Black" BorderStyle="Solid" BorderWidth="1" Width="400px"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Keywords">
<ItemTemplate>
<asp:Literal ID="LtrKeywords" runat="server" Text='<%# Eval("Keywords")%>'></asp:Literal>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TxtKeywords" runat="server" Text='<%# Bind("Keywords")%>' Height="40px" Rows="2" TextMode="MultiLine" BorderColor="Black" BorderStyle="Solid" BorderWidth="1" Width="400px"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" Text="Insert" CausesValidation="true" CommandName="Insert" />
</Fields>
<InsertRowStyle BackColor="Azure" Height="20px" />
<RowStyle Height="20px" />
<FieldHeaderStyle CssClass="row1" />
</asp:DetailsView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" InsertMethod="InsertMemo" OldValuesParameterFormatString="original_{0}" SelectMethod="GetMemoForInsert" TypeName="MemoBusinessLayer" OnInserting="ObjectDataSource1_Inserting" OnInserted="ObjectDataSource1_Inserted"></asp:ObjectDataSource>
---- CS file/Code behind ---
protected void Page_Load(object sender, EventArgs e)
{
}
protected void DetailsViewInsert_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
if (e.CommandName.Equals("Insert"))
{
ObjectDataSource1.Insert();
}
}
protected void ObjectDataSource1_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
string councilRef = ((TextBox)DetailsViewInsert.FindControl("TxtCouncilRef")).Text;
string comRef = ((TextBox)DetailsViewInsert.FindControl("TxtComRef")).Text;
string secRef = ((TextBox)DetailsViewInsert.FindControl("TxtSecRef")).Text;
string PECons = ((TextBox)DetailsViewInsert.FindControl("TxtPECons")).Text;
string dept = ((DropDownList)DetailsViewInsert.FindControl("DropDownDept")).SelectedItem.Value;
string memoTitle = ((TextBox)DetailsViewInsert.FindControl("TxtMemoTitle")).Text;
string keywords = ((TextBox)DetailsViewInsert.FindControl("TxtKeywords")).Text;
e.InputParameters.Clear();
e.InputParameters.Add("memoID", "0");
e.InputParameters.Add("councilRef", councilRef);
e.InputParameters.Add("comRef", comRef);
e.InputParameters.Add("secRef", secRef);
e.InputParameters.Add("peCons", PECons);
e.InputParameters.Add("departmentID", dept);
e.InputParameters.Add("documentTitle", memoTitle);
e.InputParameters.Add("keywords", keywords);
e.InputParameters.Add("lastRecordID", -1);
}
protected void ObjectDataSource1_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
DivResult.Visible = true;
}
else
{
// TODO
}
}
BLL/DAL
public static int InsertMemo(
int memoID,
string councilRef,
string comRef,
string secRef,
string peCons,
int departmentID,
string documentTitle,
string keywords,
out int lastRecordID
)
{
int rowsAffected = 0;
using (SqlConnection connection = ConnectionManager.GetMPSAdminConnection())
{
SqlCommand command = new SqlCommand("admin_InsertMemo", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@CouncilRef", SqlDbType.VarChar).Value = councilRef;
command.Parameters.Add("@ComRef", SqlDbType.VarChar).Value = comRef;
command.Parameters.Add("@SecRef", SqlDbType.VarChar).Value = secRef;
command.Parameters.Add("@PECons", SqlDbType.VarChar).Value = peCons;
command.Parameters.Add("@DeptID", SqlDbType.Int).Value = departmentID;
command.Parameters.Add("@MemoTitle", SqlDbType.NVarChar).Value = documentTitle;
command.Parameters.Add("@Keywords", SqlDbType.NVarChar).Value = keywords;
command.Parameters.Add("@LastRecordID", SqlDbType.Int).Direction = ParameterDirection.Output;
rowsAffected = command.ExecuteNonQuery();
lastRecordID = Convert.ToInt32(command.Parameters["@LastRecordID"].Value.ToString());
}
return rowsAffected;
}
Stored Proc..
CREATE PROCEDURE admin_InsertMemo(
@CouncilRef varchar(20),
@ComRef varchar(20),
@SecRef varchar(20),
@PECons varchar(20),
@DeptID int,
@MemoTitle nvarchar(200),
@Keywords nvarchar(250),
@LastRecordID int output
)
AS
INSERT INTO Memo
(
CouncilRef, ComRef, SecRef, PECons, DeptID, MemoTitle, Keywords
)
VALUES
(
@CouncilRef, @ComRef, @SecRef, @PECons, @DeptID, @MemoTitle, @Keywords
)
SET @LastRecordID = SCOPE_IDENTITY()
GO