2013-05-21 45 views
2

我有一個情況,我有一個從允許編輯的sql表填充的gridview。對於其中一個字段,我擁有它,用戶必須從GridView的編輯模板中的下拉框中選擇一個值。將DropDownList SelectedValue設置爲一個有時爲空值的綁定字段

<asp:TemplateField HeaderText="Department" SortExpression="Department"> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddlEditDepartment" runat="server" 
         SelectedValue='<%# Bind("Department") %>'> 
        <asp:ListItem>Department 1</asp:ListItem> 
        <asp:ListItem>Department 2</asp:ListItem> 
        <asp:ListItem>Department 3</asp:ListItem> 
        </asp:DropDownList> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="lblDepartment" runat="server" Text='<%# Bind("Department") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 

如果您選擇在這個領域已經有存儲在表中的一個值,沒有問題的紀錄「編輯」。但是,如果選擇「編輯」,並沒有在表中它沒有價值呢,您會收到以下錯誤

'ddlEditDepartment' has a SelectedValue which is invalid because it does not exist in the list of items. 
Parameter name: value 

我怎麼能在這種情況下,佔空或空值,而且使這項工作?

回答

1

你是你的DropDownList綁定到你的GridView的數據源命名爲「系」字段:

SelectedValue='<%# Bind("Department") %>' 

這是一種黑客攻擊的,但你可以修改填充你的GridView的部門領域查詢賬號爲空值(由聚結出來):

SELECT COALESCE(Department, "No department entered") AS Department 
FROM YourTable 

然後再補充,作爲一種在下拉列表中選擇「默認」選項:

<asp:ListItem>No department entered</asp:ListItem> 
+0

我真的很喜歡這個想法,它會做我想做的。雖然編輯Select語句後,出現錯誤: DataBinding:'System.Data.DataRowView'不包含名爲'Department'的屬性。 'SelectCommand =「SELECT ID,COALESCE(Department,'No department'),Notes FROM Departments」' –

+0

編輯註釋... –

+0

我的不好,你需要別名列@ @ kyle_13。 'COALESCE(部門,'沒有部門')AS Department' – jadarnel27

1

聽起來好像您正在嘗試更新不存在的記錄。所以,你有幾個選擇,取決於你想要做什麼。您可以捕獲該錯誤並向用戶顯示一個用戶友好的警報,以便在編輯之前需要創建一條新記錄。或者,如果錯誤發生,您可以捕獲該錯誤並運行插入命令。或者你可以防止錯誤發生在一起。這是我的建議。在後面的代碼中,當dropdowlist事件觸發時,請帶上ID並運行查詢以查看記錄是否存在。如果是,請更新它。如果沒有,請提醒用戶,或者您可以直接插入。如果您有關於如何做到這一點的具體問題,請告訴我。

+0

嗨@jason,謝謝。我基本上試圖做的是,如果字段實際上是空值,那麼在更新記錄時拉入空的「空白」值,然後用下拉菜單中新輸入的值更新記錄。沒有jadarnel27的解決方法,它會拋出錯誤。 –

相關問題