如何从动态填充的下拉列表中显示动态生成的行的结果

问题描述 投票:0回答:0

在向数据库中插入记录时,有两个表单下拉列表对我们的业务规则至关重要,ddlAssets 和 ddlNumCheck。

ddlAssets 有 8 个值从数据库中动态填充。

然后通过从 ddlAssets 中选择有条件地填充 ddlNumCheck。

例如从ddlAssets中选择1会自动将1添加到ddlNumCheck 从ddlAssets中选择2自动添加2个值(1,2) 选择 3 及以上的任意数字,只能将总共 3 (1,2,3) 添加到 ddlNumCheck 下拉列表

这些场景非常适合我们。

提交记录到数据库后,我们查询数据库表来填充表单字段,包括上面提到的两个下拉列表。

最初,我在选择 ddlNumCheck 的默认值时遇到了问题。

几天前解决了这个问题,感谢@Craig 的协助。 有关更多信息,请参阅以下链接: 如何从数据库中填充依赖下拉列表?

我一直在努力解决这个难题的最后一块。

一旦我们查询数据库以填充表单字段,ddlAssets 的值被选为默认值,ddlNumCheck 的值被选为默认值。

我们如何显示与 ddlNumCheck 默认值关联的行?

例如,如果 dllNumCheck 的值为 1,我们希望在插入操作期间动态创建的转发器行与其列名值一起显示。

如果ddlNumCheck的值为2,我们希望显示两行repeater控件。

如果选择的默认值为3,我们希望显示三行Repeater控件。

有什么想法可以实现吗?

我尝试使用这些方法,但它们不起作用:

Dim command As SqlCommand = New SqlCommand()
         For Each item As RepeaterItem In DynamicRepeater.Items
            Dim ddlWater As DropDownList = TryCast(item.FindControl("ddlWater"), DropDownList)
            Dim txt_amount As TextBox = TryCast(item.FindControl("txt_amount"), TextBox)
            Dim purchaseDate As TextBox = TryCast(item.FindControl("purchaseDate"), TextBox)

Dim query As String = "SELECT m.clientname,m.assetnumber,m.cost,m.purchaseDate,a.assets,m.WaterSize FROM mainTable m inner join AssetsData a on m.AssetID=a.AssetID where m.ID =" @someID
    command.Connection = connection
    cmdSQL.Parameters.Add("@someID", SqlDbType.Int).Value = ID
    command.CommandText = query
    Dim reader As SqlDataReader = command.ExecuteReader()
             
    While reader.Read()
        clientname.Text = reader("Result").ToString()
        ddlAssets.Text = reader("Result").ToString()
        ddlAssets(Nothing,Nothing)
        ddlNumCheck.Text = reader("Result").ToString()
        ddlWater.Text = reader("waterSize").ToString()
        cost.Text = reader("cost").ToString()
        purchaseDate.Text = reader("purchaseDate").ToString()
        
    End While
   Next
    connection.Close()
End Sub
and
    Protected Sub ddlNumber_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim query As String = String.Format("SELECT TOP {0} * FROM mainTable", If(Integer.Parse(ddlNumber.SelectedValue) >= 3, 3, Integer.Parse(ddlNumCheck.SelectedValue)))
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As SqlConnection = New SqlConnection(constr)
        Using cmd As SqlCommand = New SqlCommand()
            Using sda As SqlDataAdapter = New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As DataTable = New DataTable()
                    sda.Fill(dt)
                End Using
            End Using
        End Using
    End Using
    Dim Items As List(Of ItemsModel) = New List(Of ItemsModel)()
    Dim rows As Integer = 0
    Integer.TryParse(ddlNumber.SelectedValue, rows)

    For i As Integer = 0 To rows - 1
        Items.Add(New ItemsModel())
    Next

    DynamicRepeater.DataSource = If(Items.Count = 0, Nothing, Items)
    DynamicRepeater.DataBind()
End Sub

<asp:Repeater ID="DynamicRepeater" runat="server" onitemdatabound="DynamicRepeater_ItemDataBound">
         <HeaderTemplate>
         <table border="1">
             <tr>
             <td><b>Water Size</b></td>
             <td><b>Cost</b></td>
             <td><b>Purchase Date</b></td>
             </tr>
         </HeaderTemplate>
         <ItemTemplate>
         <tr>
             <td>
           <asp:DropDownList ID="ddlWater" AppendDataBoundItems="true" runat="server" AutoPostBack="true"">
               <asp:ListItem Text="Select" selected="True" Value="" />
           </asp:DropDownList>                        
             </td>
             <td>
             <asp:TextBox ID="cost" runat="server"></asp:TextBox>
             </td>
             <td>
             <asp:TextBox ID="PurchaseDate" runat="server"></asp:TextBox>
             </td>
         </tr>
         </ItemTemplate>
         <FooterTemplate>
         </table>
         </FooterTemplate>
     </asp:Repeater><br />
asp.net vb.net
© www.soinside.com 2019 - 2024. All rights reserved.