2011-04-07 23 views
1

我在中繼器中有一個下拉列表,下拉列表是數據源的數據綁定。最初所有的下拉列表將具有所有相同的項目選項。我試着做,如果顯示dropdownlist之一被選中一個選項,然後在其他dropdownlist這個選項將消失。VB.net。如何爲中繼器中的所有下拉列表執行數據綁定

這裏是ASP:

<asp:Repeater ID="UnitMatchRepeater" runat="server" DataSourceID="OldUnitsDataSource" > 
    <ItemTemplate> 
     <tr> 
     <td> 
     <asp:Label ID="OldUnitNumber" runat="server" Text='<%# Eval("Vehicle")%>' value='<%#Container.DataItem("LinkNumber") %>'></asp:Label> 
     </td> 
     <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> 
     <td> 
     <asp:DropDownList ID="NewUnitsDropDownBox" runat="server" DataSourceID="NewUnitsDataSource" DataTextField="UnitNumber" 
      DataValueField="LinkNumber" OnDataBound="call_it" AutoPostBack="true" value='<%# Container.DataItem("LinkNumber")%>'></asp:DropDownList> 
     </td> 
     <br/> 
     </tr> 
    </ItemTemplate> 
    </asp:Repeater> 
<asp:SqlDataSource ID="OldUnitsDataSource" runat="server" 
     ConnectionString="<%$ ConnectionStrings:minotaurSQLConnectionString %>"> 
    </asp:SqlDataSource> 
    <br /> 
    <asp:SqlDataSource ID="NewUnitsDataSource" runat="server" 
     ConnectionString="<%$ ConnectionStrings:minotaurSQLConnectionString %>" 
     SelectCommand="SELECT Minotaur.dbo.Units.LinkNumber AS LinkNumber, RTAFleet.dbo.vehfile.vehicle AS UnitNumber FROM RTAFleet.dbo.vehfile INNER JOIN Minotaur.dbo.Units ON RTAFleet.dbo.vehfile.link_number = Minotaur.dbo.Units.LinkNumber AND Minotaur.dbo.Units.AcquisitionOrderID = @AcquisitionOrderID AND Minotaur.dbo.Units.SnapShotID = 1 AND Minotaur.dbo.Units.OldLinkNumber IS NULL"> 
     <SelectParameters> 
      <asp:QueryStringParameter Name="AcquisitionOrderID" QueryStringField="orderID" 
       Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

這裏是後面的代碼:

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim LinkNoArray As String() = Request.QueryString("linkNumber").Split(",") 
     Dim SqlStr As String = "SELECT Vehicle = CASE WHEN ISNUMERIC(RTAFleet.dbo.vehfile.vehicle) = 1 AND RTAFleet.dbo.vehfile.vehicle IS NOT NULL THEN RTAFleet.dbo.vehfile.vehicle ELSE RTAFleet.dbo.vehfile.veh_xref_num END, RTAFleet.dbo.vehfile.link_number AS LinkNumber FROM RTAFleet.dbo.vehfile INNER JOIN Minotaur.dbo.Units ON RTAFleet.dbo.vehfile.link_number = Minotaur.dbo.Units.LinkNumber AND Minotaur.dbo.Units.SnapShotID = 1 WHERE " 
     For Each Str As String In LinkNoArray 
      SqlStr = SqlStr & " Minotaur.dbo.Units.LinkNumber = " & Trim(Str) & " OR" 
     Next 
     If Not Page.IsPostBack Then 
      SqlStr = Left(SqlStr, (SqlStr.Length - 2)) 
      OldUnitsDataSource.SelectCommand = SqlStr 
      UnitMatchRepeater.DataBind() 
     End If 



End Sub 

Private Sub UnitMatchRepeater_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles UnitMatchRepeater.ItemCreated 
     If Not e.Item.ItemType = ListItemType.Item And Not e.Item.ItemType = ListItemType.AlternatingItem Then 
      Exit Sub 
     End If 
     Dim NewUnitsDDB As DropDownList = e.Item.FindControl("NewUnitsDropDownBox") 

     AddHandler NewUnitsDDB.SelectedIndexChanged, AddressOf NewUnitsDDB_SelectedIndexChanged 
    End Sub 

    Protected Sub NewUnitsDDB_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
     Dim linkNo As String = CType(sender, DropDownList).SelectedValue 
     Dim sqlStr As String = "UPDATE dbo.Units SET OldLinkNumber = @oldLinkNum WHERE LinkNumber = @newLinkNum" 
     Dim con As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("minotaurSQLConnectionString").ConnectionString) 
     Dim cmd As SqlCommand = New SqlCommand(sqlStr, con) 
     cmd.Parameters.Add("@oldLinkNum", SqlDbType.Int).Value = CType(sender, DropDownList).Attributes("value") 
     cmd.Parameters.Add("@newLinkNum", SqlDbType.Int).Value = CInt(linkNo) 

     con.Open() 
     cmd.ExecuteNonQuery() 
     con.Close() 

     dlistdatabinding() 


    End Sub 

Private Sub dlistdatabinding() 

     For Each rep As RepeaterItem In UnitMatchRepeater.Items 
      Dim list As DropDownList = rep.FindControl("NewUnitsDropDownBox") 
      list.DataBind() 
     Next 

End Sub 

請幫忙找出如何使它工作。 謝謝

回答

1

把你的下拉列表數據綁定代碼放在你的中繼器的ItemDataBound事件中。每次它在中繼器中創建「行」時,都會觸發此事件。從那裏您可以找到該項目中的單個下拉列表。

這樣做的附加好處是,由於每個項目都是數據綁定的,因此可能會根據您正在使用的數據更改下拉列表的內容。

相關問題