我有一个链接到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。这会导致问题,有没有办法解决这个问题?
答案 0 :(得分:0)
您必须先将项目添加到列表框中,然后才能选择它。
DropDownListX.Items.Add("Item");
或
DropDownListX.Items.Add(new ListItem("String","Value"));
确保在选择新行时清除DropDown框,否则旧行值将保留在那里。
DropDownListX.Items.Clear();
在此之后您可以使用SelectedValue
干杯, 斯蒂芬
答案 1 :(得分:0)
您可以尝试以下几种方法:
更改SQLDataSource以返回type_id,并将列设置为visible =“false”,这样您可以选择该字段而不是名称,并将其用于.SelectedValue。
如果那是不可能的,那么您可以使用这样的代码(这只有在下拉列表中显示的文本是唯一的并且与网格视图中显示的内容完全相同时才有效):
'replace this with the call to currentRow.Items(#).Value
Dim sometext As String = "type_name"
DropDownListName.Items.FindByText(sometext).Selected = True
另一种可能性是循环遍历下拉列表中的每个元素并找到文本,这就像蛮力方法但有效。
'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`