2008-09-01 63 views
2

我有一個asp.net 2.0網站,其中有許多asp:DropDownList控件。 DropDownList控件包含標準信息城市,州,縣等...信息。 除了標準代碼之外,該網站還具有用戶可自行配置的自定義代碼。 例如,動物下拉列表可能包含Dog,Cat,Fish等值...asp:DropDownList錯誤:'DropDownList1'有一個無效的,因爲它不存在於項目列表中的SelectedValue

我從我創建的SQL 2005表中彈出DropDownList,例如, tblCodes

一切都很好,用戶可以使用衆多DropDownList控件添加訂單,從列表中選擇項目。

如果用戶想要更改其自定義下拉列表中的某一個,則會發生此問題。例如,用戶想要將動物類型控制上的動詞 從Dog更改爲K9。這是問題開始的地方。

對於所有新訂單,下拉菜單均正常工作。當用戶檢索舊訂單 時,我在C#代碼隱藏中得到以下錯誤 「'DropDownList1'具有一個無效的SelectedValue,因爲它不存在於項目列表中。」

發生了什麼是舊的訂單有一個數據庫字段值的狗和DropDownList不再有Dog在其列表中,因爲用戶將其更改爲K9。

解決方法的任何想法?
有沒有辦法讓asp:DropDownList接受項目不在其列表中? 我可以使用另一種控制嗎?

回答

2

我不知道這是同樣的問題,但我也有類似的探測問題,試圖綁定一個DropDownList,我想在GridView遏制。當我環顧四周時,我發現很多人提出類似的問題,但沒有可靠的解決方案。我確實讀過關於是否可以攔截數據綁定等事件的衝突報告。我嘗試了其中的大部分,但我無法找到攔截或搶先錯誤的方法。

我最終創建了ddl的子類,從那裏竊取修復程序,截獲錯誤。

不整潔,但它符合我的需求。如果有幫助,我會將代碼放在我的博客上。link text

+0

鏈接斷開數據valuei。把解決方案放在這裏或刪除答案 – Rake36 2016-01-15 15:39:40

4

Your SelectedValue應該是某種唯一的ID,不會改變。顯示給用戶的文本值是單獨的,並且可以根據需要更改而不會影響您的應用程序,因爲您將該id與您的Order關聯,而不是顯示的字符串值。

6

我在兩天前解決了這個問題。首先,我將將SelectedValue設置爲DropDownList的PreRender處理程序的代碼。然後,我添加邏輯來首先檢查值是否在下拉列表中。如果沒有,我補充一下。

這是我的代碼。 ddSpecialty是我的下拉列表,填入數據庫中的「特色」。註冊。特殊性是用戶選擇的專業,可能會或可能不在下拉菜單中,因爲該特定專業可能已被刪除,因爲他們上次選擇了它。

protected void ddSpecialty_PreRender(object sender, EventArgs e) 
{ 
    if (!ddSpecialty.Items.Contains(new ListItem(registration.Specialty))) 
     ddSpecialty.Items.Add(registration.Specialty); 
    ddSpecialty.SelectedValue = registration.Specialty; 
} 
0

試試這個:

if (ddl.Items.Contains(new ListItem(selectedFacility))) 
    ddl.SelectedValue = selectedFacility; 
5

我變得很喜歡下面的小片段的設置DropDownList的值:

對於非數據綁定(如項目手動添加):

ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value)); 

For DataBound

ddl.DataBound += (o,e) => ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value)); 

我確定希望雖然ListControls一般不會拋出錯誤,當您嘗試將值設置爲不存在的東西時。至少在釋放模式下,反正它會很好,只是悄然死亡。

0

就遇到了這個自己。奇怪的是,ddl.ClearSelection();沒有工作。不得不使用ddl.SelectedValue = null

也注意到,這必須在清除ddl.Items.Clear();列表中的項目之後出現,這似乎也很奇怪。將SelectedValue設置爲null,然後清除項目仍會拋出錯誤。

完成此操作後,重新綁定列表並重新選擇新值。

0

我經常遇到這個問題之後做了一個解決方法。不幸的是,MS仍然沒有恢復這個問題。

無論如何,我的解決方法如下。

1)我的數據綁定到DropDownList的

<asp:DropDownList ID="edtDepartureIDKey" runat="server" CssClass="textbox" 
ToolTip='<%# Eval("DepartureIDKey") %>' DataSource="<%# DLL1DataSource() %>" DataTextField="DisplayField" DataValueField="IDKey" 
onprerender="edtDepartureIDKey_PreRender"> 

2)對預渲染事件中,我檢查數據的availibilty工具提示屬性,如果不在列表中,我只是將其添加,然後將selectedIndex設置爲我保存在ToolTip屬性

protected void edtDepartureIDKey_PreRender(object sender, EventArgs e) 
{ 
    DropDownList ddl = (sender as DropDownList); 
    if (ddl.Items.FindByValue(ddl.ToolTip) == null) 
    { 
     //I am pulling Departure Data through the ID which is saved in ToolTip, and insert it into the 1st row of the DropDownList 
     TODepartureData v = new TODepartureData(DBSERVER.ConnStrName); 
     TODeparture d = v.Select(Convert.ToInt32(ddl.ToolTip)); 
     ddl.Items.Insert(0, new ListItem(d.DeptCode, ddl.ToolTip)); 
    } 
    ddl.Items.FindByValue(ddl.ToolTip).Selected = true; 
} 

how it looks

相關問題