0

我有一个链接到 SqlDataSource 的 WebDataGrid 来显示数据。选择一行后,我想用该行中的数据填充一些文本框和下拉列表,以进行编辑。文本框工作正常;我使用以下代码选择网格中的第二个字段(日期)并填充相应的文本框(我使用的是 VB):

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

但是,当我尝试使用相同的代码结构填充下拉列表时,出现以下错误:

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

我认为问题可能是使用 type_id 填充下拉列表,而网格显示 type_name。这会导致问题吗,有没有办法解决这个问题?

4

2 回答 2

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`
    
于 2010-12-16T16:49:01.643 回答
0

您必须先将项目添加到列表框中,然后才能选择它。

DropDownListX.Items.Add("Item");

或者

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

确保在选择新行时清除下拉框,否则旧行值将保留在那里。

DropDownListX.Items.Clear();

在此之后,您可以使用 SelectedValue

干杯,斯特凡

于 2010-12-16T16:00:04.843 回答