Friday, 27 September 2013

ASP .NET Update command different SQL Data Sources

ASP .NET Update command different SQL Data Sources

I have DetailsView that automatically selects data from a datasource.
Within that detailsview I have 2 dropdown lists bound from a different
datasource. On update I want the text and value of each drop down list to
store into the database.
I can't seem to get the value of the dropdown lists so I can update the
paramaters before the SQL command is executed. Or if there is another way
to do so that'd be great.
<asp:DetailsView ID="UserProfile" runat="server"
AutoGenerateRows="False" DataKeyNames="UserId" DefaultMode="Edit"
DataSourceID="UserProfileDataSource"
onitemupdated="UserProfile_ItemUpdated"
OnPageIndexChanging="UserProfile_PageIndexChanging">
<Fields>
<asp:BoundField DataField="fname" HeaderText="First Name:"
SortExpression="fname" />
<asp:BoundField DataField="lname" HeaderText="Last Name:"
SortExpression="lname" />
<asp:BoundField DataField="address" HeaderText="Address:"
SortExpression="address" />
<asp:BoundField DataField="city" HeaderText="City:"
SortExpression="city" />
<asp:TemplateField HeaderText="State:" SortExpression="state">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="State_en"
DataValueField="StateId">
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#
Bind("state") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#
Bind("state") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="zip" HeaderText="Zip Code:"
SortExpression="zip" />
<asp:BoundField DataField="phoneNum" HeaderText="Phone Number:"
SortExpression="phoneNum" />
<asp:TemplateField HeaderText="Auto Carrier:"
SortExpression="autoCarrier">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="SqlDataSource2" DataTextField="Name"
DataValueField="CarrerID">
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%#
Bind("autoCarrier") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%#
Bind("autoCarrier") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="policyNum" HeaderText="Policy Number:"
SortExpression="policyNum" />
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="UserProfileDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
SelectCommand="SELECT [fname], [lname], [address], [city],
[state], [zip], [phoneNum], [autoCarrier], [policyNum],
[accountid] ,[UserId] FROM [UserProfile] WHERE ([UserId] =
@UserId)"
OnSelecting="UserProfileDataSource_Selecting"
OnUpdating="OnSqlUpdating"
UpdateCommand="UPDATE UserProfile SET
stateId = @stateId,
carrierId = @carrierId,
fname = @fname,
lname= @lname,
address = @address,
city = @city,
state = @state,
zip = @zip,
phoneNum = @phoneNum,
autoCarrier = @autoCarrier,
policyNum = @policyNum
WHERE ([UserId] = @UserId)">
<SelectParameters>
<asp:Parameter Name="UserId" Type="Object" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="fname" />
<asp:Parameter Name="lname" />
<asp:Parameter Name="address" />
<asp:Parameter Name="city" />
<asp:Parameter Name="state" />
<asp:Parameter Name="zip" />
<asp:Parameter Name="phoneNum" />
<asp:Parameter Name="autoCarrier" />
<asp:Parameter Name="policyNum" />
<asp:Parameter Name="stateId" />
<asp:Parameter Name="carrierId" />
<asp:Parameter Name="UserId" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
SelectCommand="SELECT [StateId], [State_en] FROM
[States]"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
SelectCommand="SELECT [CarrerID], [Name] FROM ### WHERE
([AccountID] = (SELECT [accountid] FROM ### WHERE ([UserId] =
@UserId)))" OnSelecting="UserProfileDataSource_Selecting">
<SelectParameters>
<asp:Parameter Name="UserId" Type="Object" />
</SelectParameters>
</asp:SqlDataSource>
Here's the code Behind that I wrote, but doesn't work:
protected void OnSqlUpdating(object sender, SqlDataSourceCommandEventArgs e)
{
string state = DropDownList1.SelectedItem.Text;
string autoCarrier = DropDownList2.SelectedItem.Text;
string stateId = DropDownList1.SelectedItem.Value;
string carrierId = DropDownList2.SelectedItem.Value;
e.Command.Parameters["@state"].Value = state;
e.Command.Parameters["@autoCarrier"].Value = autoCarrier;
e.Command.Parameters["@stateId"].Value = stateId;
e.Command.Parameters["@carrierId"].Value = carrierId;
}
I keep getting:
Error 99 The name 'DropDownList1' does not exist in the current context
Error 102 The name 'DropDownList1' does not exist in the current context
Error 101 The name 'DropDownList2' does not exist in the current context
Error 103 The name 'DropDownList2' does not exist in the current context
I'm new to ASP so any suggestions you recommend or cleaning up of bad code
practices is appreciated.

No comments:

Post a Comment