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 回答