1

ASP.NET は初めてで、現在、DetailsView のドロップダウン リストに問題があります。

例外エラー: System.InvalidOperationException: Eval()、XPath()、Bind() などのデータ バインディング メソッドは、データ バインドされたコントロールのコンテキストでのみ使用できます。

このコードは、DetailsView のドロップダウンリストのリストを更新するためのコード ビハインドです。

protected void ddlVendor_SelectedIndexChanged 
               (object sender, EventArgs e) 
{ 
    DropDownList ddlVendorBB = 
        (DropDownList)DetailsView1.FindControl("VendorBUName"); 

    if (ddlVendorBB != null) 
    { 
        Response.Write("SelectChanged"); 
        ddlVendorBB.DataBind(); 
    } 
} 

protected void SqlDataSourceProd_Selecting 
    (object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    DropDownList ddlVendor = 
        (DropDownList)DetailsView1.FindControl("VendorName"); 

    if (ddlVendor != null) 
    { 
        e.Command.Parameters["@VendorID"].Value = ddlVendor.SelectedValue; 
    } 
}

DetailsView のこれら 2 つのドロップダウンリスト

<EditItemTemplate> 
    <asp:DropDownList id="VendorName"
        datasourceid="VendorSqlDataSource"
        AutoPostBack="true"
        datatextfield="VendorName"
        DataValueField="VendorID"   
        SelectedValue='<%# Bind("VendorID") %>'  
        runat="server"
        OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" />

    <asp:SqlDataSource ID="VendorSqlDataSource"
        ConnectionString="<%$Connectionstrings:ConnectionString%>" 
        SelectCommand="SELECT VendorID, VendorName from MDF_Vendor"
        runat="server"> 
    </asp:SqlDataSource> 
</EditItemTemplate> 


<EditItemTemplate>
    <asp:DropDownList id="VendorBUName"
        datasourceid="VendorBUSqlDataSource" 
        datatextfield="VendorBUName"
        DataValueField="VendorBUID"   
        SelectedValue='<%# Bind("VendorBUID") %>'  
        runat="server"/>

    <asp:SqlDataSource ID="VendorBUSqlDataSource"
        runat="server"
        ConnectionString="<%$Connectionstrings:ConnectionString%>"
        selectcommand="SELECT VendorBUID, VendorBUName
                       from MDF_VendorBU
                       Where VendorID = @VendorID"
        OnSelecting="SqlDataSourceProd_Selecting"> 
        <SelectParameters> 
            <asp:Parameter Name="VendorID" Type="Int32" /> 
        </SelectParameters> 
    </asp:SqlDataSource> 
</EditItemTemplate>

問題は次のとおりです。

SelectedValue= のままにしておくと、編集モードのドロップダウンリストは、最初に [編集] をクリックしたときにリストされた項目の正しい値を選択しましたが、新しい VendorName を選択すると、「Eval()、Xpath()、および練る()... "。

ここで、ドロップダウンリストの Selectedvalued を削除すると、新しい VendorName を選択したときに VendorBUName が更新されますが、[編集] をクリックしてもデフォルトの VendorID は選択されません。現在の VendorID を選択せず​​に、VendorName リストをリストするだけです。

誰かが私のコードで何が間違っているか教えてもらえますか? ありがとう!

4

1 に答える 1

1

エラーが示すように、使用しようとしている場所で Bind を使用することはできません。ただし、 DataBinderを使用できるはずです

SelectedValue='<%# DataBinder.Eval (Container.DataItem, "VendorBUID") %>'

編集: DataBinder を使用して値を SelectedValue にバインドしても機能しなかったため、データをバインドするときに値の設定を試みることができます。VendorBUID指定されたdataSourceは、 と呼ばれるプロパティを持つクラスのインスタンスです。

public override void OnLoad(EventArgs e) {
    VendorBUName.DataBinding += dataBindDropDown;
}

private void dataBindDropDown(object sender, EventArgs e) {
    VendorBUName.SelectedValue = dataSource.VendorBUID;
}
于 2012-10-09T23:10:30.800 に答える