3

データベースからドロップダウン リストを作成しようとすると問題が発生します。データソースを設定しようとすると、ドロップダウン コントロールが見つかりません。これは DetailsView にあるため、編集モードのときにのみ作成されることに関係があると思います。ただし、編集中は現在のモードになっていると表示されるので、何が起こっているのかわかりません。

aspx ファイルのコードは次のとおりです。

<asp:DetailsView id="DetailsView1" runat="server" AutoGenerateRows="false" DataSourceID="myMySqlDataSrc"  DataKeyNames="id" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateInsertButton="False" >
     <Fields>
        <asp:TemplateField HeaderText="Region">
            <ItemTemplate><%# Eval("region_name") %></ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="RegionDropdownList" runat="server" SelectedValue='<%# Bind("region_id")%>' />
            </EditItemTemplate>
        </asp:TemplateField>        
     </Fields>
</asp:DetailsView>

そして、これはコードビハインドからのものです:

ArrayList regionsList = BPBusiness.getRegions();
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
    DropDownList ddlRegions = (DropDownList)DetailsView1.FindControl("RegionDropdownList");
    if (ddlRegions != null)
    {
        ddlRegions.DataSource = regionsList;
        ddlRegions.DataBind();
    }
}
4

2 に答える 2

3

まだの場合は、コードのサンプルをDetailsView1_ModeChangedメソッドまたはDetailsView1_DataBoundメソッド内に配置します。DetailsView1_ModeChangingメソッドにある場合、モードは実際にはまだ変更されていません。

編集: また、DataTextFieldとDataValueFieldを次のように設定していることを確認してください。

DropDownList1.DataTextField = "TextFieldName";
DropDownList1.DataValueField = "ValueFieldName";

SelectedValueバインドも削除します。エラーをスローする以外は何もしません。

編集2:最初にデータバインドされたときにドロップダウンリストの特定の値を本当に選択する必要がある場合は、次のようにすることができます。

if(DropDownList1.Items.Contains(DropDownList1.Items.FindByValue("Value")))
{
    DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Value));
}
于 2010-04-23T16:11:23.023 に答える
2

itemcreatedメソッドでやってみてください

protected void DetailsView1_ItemCreated(object sender, EventArgs e)
{
    ArrayList regionsList = BPBusiness.getRegions();
    if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
    {
        DropDownList ddlRegions = (DropDownList)DetailsView1.FindControl("RegionDropdownList");
        if (ddlRegions != null)
        {
            ddlRegions.DataSource = regionsList;
            ddlRegions.DataBind();
        }
    }
}

設定することを忘れないでくださいOnItemCreated="DetailsView1_ItemCreated"

于 2010-04-23T16:11:15.757 に答える