1

データソースからデータを自動的に選択する 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 を初めて使用するので、推奨する提案や悪いコード プラクティスのクリーンアップを歓迎します。

4

1 に答える 1

2

コントロール 用 がありますのでDropDownList1DropDownList2直接アクセスすることはできません。データバインディングの後、次を使用できます:TemplateFieldDetailsView

DropDownList1 myDropDownList =(DropDownList)UserProfile..Rows[0].Cells[0].FindControl("DropDownList1");
string state = myDropDownList .SelectedItem.Text;

パラメータを渡すには、OnUpdating Event を使用する必要があります。

<asp:SqlDataSource ID="UserProfileDataSource" runat="server"  

OnUpdating="UserProfileDataSource_Updating"

          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 UserProfileDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
            {
                e.Command.Parameters["@ParamaterName"].Value = // The Value you get from the drop         downlist
            }
于 2013-09-27T23:44:21.787 に答える