2010-03-08 74 views
1

我正在使用Asp.Net中的GridView。當最初的頁面加載時,我的gridview看起來像: alt text http://www.freeimagehosting.net/uploads/e45e5b66d4.jpg在GridView的EditTemplates中使用DropDownList

當用戶點擊,編輯一個行,我使用編輯模板來顯示DropDownList中的'域'。但問題是,當DropDownlist獲取數據加載時,它丟失了「域」的當前值。
如果我想編輯第4行,這是目前設爲其領域「計算機」是越來越改爲「MBA」這是ofcourse由DataSource的第一要素回報。 alt text http://www.freeimagehosting.net/uploads/7d3f6ba9a5.jpg


我想在DropDownList中所選擇的值來顯示當前值(「計算機」)。但是我無法獲得正在編輯的域的價值。然而

SelectedValue='<%# Eval("Domain") %>' 

,如果你綁定了一個不存在,一個將引發異常值:

回答

2

解決異常使用AppendDataBoundItems =「true」。

<asp:DropDownList ID="ddlCategory" runat="server" SelectedValue='<%# Eval("Domain") %>' 
     DataSourceID="datasource" 
      DataTextField="text" DataValueField="value" AppendDataBoundItems="true"> 
      <asp:ListItem Text="Select..." Value=""></asp:ListItem> 
     </asp:DropDownList> 
+0

@Saar謝謝,它爲我工作,但我必須將DomainId作爲SelectedValue。:) –

+0

不客氣。 – Saar

2

可以下拉的SelectedValue屬性綁定爲英寸所以你可能需要根據你的場景來處理代碼。

編輯:如果該值不存在,不幸的剩餘溶液將接進GridView的的RowDataBound並獲得參照下拉,然後執行:

MyBoundObject obj = (MyBoundObject)e.Row.DataItem; 
DropDownList ddl = (DropDownList)e.Row.Cells[<index>].FindControl("ddl1"); 
ListItem item = ddl.Items.FindByValue(obj.Domain); 
if (item != null) item.Selected = true; 

這裏,僅當列表項目存在它被選中。如果沒有選擇該項目,請嘗試ddl.SelectedValue = item.Value。

HTH。

+0

是的,我試過了,但得到一個異常,目前的值不存在列表中。該怎麼辦。 –

+0

在代碼中處理它是唯一的其他解決方案。將在上面編輯。 –

+0

非常感謝代碼。 –

0

這可能會幫助您:

聽事件RowEditing,獲得使用.FindControl()方法的具體行的下拉列表,並在DDL執行明確.DataBind()。

相關問題