我在尝试从数据库填充下拉列表时遇到了问题。当我尝试设置数据源时,我找不到dropdown控件,它在一个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();
}
}发布于 2010-04-24 00:11:23
如果还没有,请将代码中的示例放在DetailsView1_ModeChanged或DetailsView1_DataBound方法中。如果它在DetailsView1_ModeChanging方法中,那么模式实际上还没有改变。
EDIT:另外,请确保像这样设置DataTextField和DataValueField:
DropDownList1.DataTextField = "TextFieldName";
DropDownList1.DataValueField = "ValueFieldName";还要删除SelectedValue绑定;它除了抛出错误之外什么也不做。
EDIT 2:如果你真的需要选择下拉列表的一个特定值,当它第一次是数据绑定时,你可以这样做:
if(DropDownList1.Items.Contains(DropDownList1.Items.FindByValue("Value")))
{
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Value));
}发布于 2010-04-24 00:11:16
请尝试在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"
https://stackoverflow.com/questions/2700028
复制相似问题