2010-12-16 186 views
0

我有一個WebDataGrid鏈接到一個SqlDataSource來顯示數據。當選中某行時,我想用該行中的數據填充某些文本框和下拉列表,以便進行編輯。文本框工作正常;我使用下面的代碼以選擇網格(日期),第二場和填充相應的文本框(我用VB):從WebDataGrid填充DropDownList

txtDate.Text = currentRow.Items(2).Value 

然而,當我嘗試使用相同的代碼結構來填充dropdownlists ,我得到以下錯誤:

'ddlType' has a SelectedValue which is invalid because it does not exist in the list of items. 

我認爲這個問題可能是dropdownlists使用TYPE_ID填充,而網格顯示TYPE_NAME。這是否會導致問題,並有辦法解決這個問題?

回答

0

有幾件事情你可以嘗試:

  1. 更改的SqlDataSource也返回TYPE_ID和將列設置爲visible =「false」,這樣您可以選擇該字段而不是名稱,並將其用於.SelectedValue。

  2. 如果這是不可能的,那麼你可以使用這樣的代碼(這將只在下拉菜單中顯示的文本是唯一的並且與網格視圖中顯示的內容完全相同時才起作用):

    'replace this with the call to currentRow.Items(#).Value
    Dim sometext As String = "type_name"

    DropDownListName.Items.FindByText(sometext).Selected = True

  3. 另一種可能性是遍歷在下拉每個元件向下和查找的文本,這就像蠻力方法但有效。

    'replace this with the call to currentRow.Items(#).Value

    Dim sometext As String = "type_name"

    For Each ddItem As ListItem In ddArriveAMPM.Items

    `If String.Compare(sometext, ddItem.Text, True) = 1 Then` 
        `ddItem.Selected = True` 
        `End If`   
    `Next` 
    
+0

我不知道我理解第二個選項(我對ASP.NET很新)。所選行的type_name不使用currentRow.Items(#)。Value?(下拉列表中的每個項目都是唯一的,並且與網格視圖中顯示的名稱相同。) – dj18 2010-12-16 17:07:37

+0

謝謝 - 我正在使用第一個建議! – dj18 2010-12-16 19:48:47

0

您必須先將項目添加到列表框中,然後才能選擇它。

DropDownListX.Items.Add("Item"); 

DropDownListX.Items.Add(new ListItem("String","Value")); 

確保選擇一個新行,否則舊行值將保持在那裏,當清除下拉框。

DropDownListX.Items.Clear(); 

在此之後,你可以使用的SelectedValue

乾杯, 斯特凡

+0

現在我得到以下錯誤信息:「無效的回發或回調參數......爲了安全起見,此功能驗證回發或回調事件的參數來自最初呈現它們的服務器控件。如果數據是有效的和預期的,則u選擇ClientScriptManager。RegisterForEventValidation方法,以註冊回發或回調數據進行驗證。「並填充文本框也停止工作。 – dj18 2010-12-16 16:47:08

+0

順便說一句,爲:DropDownListX.Items.Add(新的ListItem(」字符串「,」價值「)); - - 參數是currentRow.Items(1).Value(或者我需要的任何字段號)? – dj18 2010-12-16 16:53:22

+0

是的,也許很好做一個currentRow.Items(1).Value.ToString()。你可以爲兩個項目,所以你可以稍後在代碼中使用SelectedValue,如果你沒有一個id或其他東西來綁定值 – StefanE 2010-12-16 16:57:13