在DetailsView中绑定DropDownList

时间:2010-04-23 15:58:10

标签: c# .net drop-down-menu .net-2.0 detailsview

我在尝试从数据库填充下拉列表时遇到问题。当我尝试设置数据源时,我找不到下拉控件,它位于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();
    }
}

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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"