データソースからデータを自動的に選択する DetailsView があります。その詳細ビュー内に、別のデータソースからバインドされた 2 つのドロップダウン リストがあります。更新時に、各ドロップダウン リストのテキストと値をデータベースに保存します。
SQL コマンドが実行される前にパラメーターを更新できるように、ドロップダウン リストの値を取得できないようです。または、それを行う別の方法があれば、それは素晴らしいことです。
<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>
これが私が書いたコードの背後にありますが、動作しません:
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;
}
私は得続けます:
エラー 99 名前 'DropDownList1' は現在のコンテキストに存在しません エラー 102 名前 'DropDownList1' は現在のコンテキストに存在しません
エラー 101 名前 'DropDownList2' は現在のコンテキストに存在しません
エラー 103 名前 'DropDownList2' は存在しません現在のコンテキストには存在しません
私は ASP を初めて使用するので、推奨する提案や悪いコード プラクティスのクリーンアップを歓迎します。