2013-07-31 35 views
0

我有一个Web更新表单,其中每个控件都是同一个表的属性。它应该以这种方式工作: 每当我从主(第一个)下拉列表中选择一个值时,应该运行查询获取所有字段(属性)并根据所选值填充其他控件。如何选择已从数据库返回的DropDownList的值

事件代码:

Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList1.SelectedIndexChanged 
     Dim objModel As New ModelDAO ' the data access class taht contains search method   
     Dim myobject = objModel.searchObject(DropDownList1.Text)      
     TextBox1.Text = myobject.Property2 
     DropDownList2.SelectedValue = myobject.Property3 'what's wrong here? 
    End Sub 

控制:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" 
        DataSourceID="SqlDataSource1" DataTextField="MODEL" DataValueField="MODEL" 
        AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
        <asp:ListItem Text="-Select-" Value="" /> 
        </asp:DropDownList> 
<asp:DropDownList ID="DropDownList2" runat="server"> 
         <asp:ListItem Value="0">-Select-</asp:ListItem> 
         <asp:ListItem>EDS</asp:ListItem> 
         <asp:ListItem>BDS</asp:ListItem>        
        </asp:DropDownList> 

它的工作原理除了第二DropDownList的,我不知道如何更改选定的价值,我想这:

DropDownList2.Text = myobject.Property3 

和这个:

DropDownList2.SelectedValue = myobject.Property3 

但是在这两种情况下,dropdownlist2都不显示所选项目。

注:由于textbox.text确实得到正确的值,我不认为搜索方法有任何问题,这就是为什么我没有发布它。

回答

1

不幸的是,这种方式行不通。我给你的伪代码,因为我是一个C#呃,但是这是我常做:

Dim int i = 0 
ForEach Item in DDL.Items 
    If Item.Text = databaseResult 
     DDL.SelectedIndex = i 
     ExitLoop 
    EndIf 
    i = i + 1 
EndForEach 

下面是从下面的评论线程的工作代码:

Dim i As Integer = 0 
For Each listitem In DropDownList1.Items 
    If DropDownList3.SelectedItem.Text = myobject.property Then 
     DropDownList3.SelectedIndex = i 
     Exit For 
    End If 
    i = i + 1 
Next 
+0

为什么它不能这样工作?设置'SelectedValue'与调用'ClearSelection'后循环项目并将第一个匹配项目的'Selected'属性设置为'True'相同。 –

+0

以我的经验,我从来没有选择过任何价值的作品。这只是对我而言没有效果。 –

+0

谢谢我转换成VB和它的工作中:Dim我为整数= 0 对于每个列表项在DropDownList1.Items 如果DropDownList3.SelectedItem.Text = myobject.property然后 DropDownList3.SelectedIndex = I 退出对于 结束如果 我= i + 1 Next – phalanx

1

如果VB是像C#(这里我有类似的问题)任何东西,然后尝试

DropDownList2.SelectedItem = myobject.Property3 

确保您要选择的项目是在项目的列表控件,否则仍然无法工作。

+0

['DropDownList.SelectedItem'](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listcontrol.selecteditem(v = vs.110)。 aspx)返回一个'ListItem'而不是一个自定义对象。 –

+0

错误:Property'SelectedItem'是'ReadOnly' – phalanx

+0

那么这将回答VB的声明就像C#在这种情况下...... C#没有DropDownList作为自己的控件,因此它需要使用组合框下拉样式设置为下拉式。在这种情况下,SelectedItem是事情为我工作的唯一途径。谢谢你的观点。 :) – SLaG

1

这里试试这个:

 int i = 0; 
     foreach (ListItem item in YourDropDownList.Items) 
     { 
      //Check it see if your item actually exists in the list 
      //Could also be item.Text     
      if (item.Value.ToLower() == value) 
      { 
       item.Selected = true; 
       YourDropDownList.SelectedIndex = i; 
       break; 
      } 
      else 
       item.Selected = false; 

      i++; 
     } 

     if (YourDropDownList.SelectedIndex != -1) 
     {     
      YourDropDownList_SelectedIndexChanged(YourDropDownList, EventArgs.Empty); 
     } 

不知道这是否会工作,你可以尝试一下:

​​
+0

如果您在匹配item.Value后立即退出循环,iSelectedIndex在此处不提供任何好处。这有点臃肿。 –

+0

@GarrisonNeely我需要使用iSelectedIndex来找出索引与匹配的ListItem并存储它。 – Mausimo

+0

为什么你不能只用我? –

1

所以你这起了selectedValue的放映工作除了在第二个下拉?

使得它必须等于父值(usualy整数)

关注另一个当然是回发问题comparsions时,请记住!

0

它的那样简单......这

ddlstate.SelectedIndex = ddlstate.Items.IndexOf(ddlstate.Items.FindByValue(dt.Rows[0]["state"].ToString())); 

state在数据库列名。

ddlstate是您的下拉列表ID。

相关问题