2010-04-23 68 views
3

我在嘗試從數據庫填充下拉列表時遇到問題。當我試圖設置數據源時,我找不到下拉控件,它位於DetailsView中,所以我認爲它可能與它僅在編輯模式下創建時有關。它仍然說當我編輯時它處於當前模式,所以不知道那裏發生了什麼。在DetailsView中綁定DropDownList

下面是從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(); 
    } 
} 
+0

什麼方法從代碼做你的樣品背後存在在? – 2010-04-23 16:08:47

+0

它在Page_Load中。 – annelie 2010-04-23 16:10:40

回答

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)); 
} 
+0

我試圖把它放在DetailsView_DataBound方法中,它會在我的SelectedValue上拋出一個錯誤,但如果我刪除列表獲取填充。雖然只有System.Collections.ArrayList而不是我想要的值,所以我想我需要設置文本和值屬性莫名其妙! :)我會嘗試設置它們,然後再用那裏的SelectedValue對其進行測試。 – annelie 2010-04-23 16:25:21

+0

@annelie看我的編輯:)。 – 2010-04-23 16:28:14

+0

謝謝,我會盡力的!我有一個arraylist的arraylist,所以只需要首先改變。那麼應該有希望工作! :) – annelie 2010-04-23 16:45:52

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"

+0

謝謝,這確實找到了控件,但是它在ddlRegions.DataBind()拋出錯誤「Eval(),XPath()和Bind()等數據綁定方法只能在數據綁定控件的上下文中使用。 」。 – annelie 2010-04-23 16:18:02

+0

使用DataBinder.Eval(Container.DataItem,「region_name」)方法而不是Eval(「region_name」) – Glennular 2010-04-23 16:35:32

相關問題