You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据ddlNumCheck默认值显示对应Repeater动态生成行?

解决ASP.NET中根据下拉框默认值动态生成Repeater行的问题

现有代码的问题分析

  • 加载数据方法存在逻辑错误:
    • 循环DynamicRepeater.Items无意义,此时Repeater未绑定数据,集合为空
    • 多次使用reader("Result"),但SQL查询中无此字段,属于字段名错误
    • ddlAssets(Nothing,Nothing)是无效语法调用
    • 变量名混乱,command和cmdSQL混用
  • ddlNumber_SelectedIndexChanged方法逻辑冗余:
    • 执行SQL查询但未使用结果,最终仍用空ItemsModel集合绑定
    • 变量名不一致,同时出现ddlNumber和ddlNumCheck,导致取值错误
  • 页面加载完成后,未根据ddlNumCheck的默认选中值触发Repeater绑定逻辑

修正后的解决方案

  1. 重构加载数据方法,正确填充表单字段
  2. 提取Repeater绑定逻辑为独立方法,方便页面加载和下拉框变化时复用
  3. 加载数据完成后,调用绑定方法根据ddlNumCheck的值生成对应行数

修正后的后台代码

' 加载数据的方法
Protected Sub LoadRecord(ByVal ID As Integer)
    Dim connectionString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using connection As New SqlConnection(connectionString)
        Dim query As String = "SELECT m.clientname, m.assetnumber, m.cost, m.purchaseDate, a.assets, m.WaterSize, m.NumCheckValue 
                               FROM mainTable m 
                               INNER JOIN AssetsData a ON m.AssetID = a.AssetID 
                               WHERE m.ID = @someID"
        Using command As New SqlCommand(query, connection)
            command.Parameters.Add("@someID", SqlDbType.Int).Value = ID
            connection.Open()
            Dim reader As SqlDataReader = command.ExecuteReader()
            If reader.Read() Then
                ' 填充表单字段
                clientname.Text = reader("clientname").ToString()
                ddlAssets.SelectedValue = reader("assets").ToString()
                ' 触发ddlAssets的选择事件,确保ddlNumCheck正确填充
                ddlAssets_SelectedIndexChanged(ddlAssets, New EventArgs())
                ' 设置ddlNumCheck的默认值
                ddlNumCheck.SelectedValue = reader("NumCheckValue").ToString()
                ' 根据ddlNumCheck的值绑定Repeater
                BindRepeaterByNumCheck()
            End If
            reader.Close()
        End Using
    End Using
End Sub

' 独立的Repeater绑定方法
Protected Sub BindRepeaterByNumCheck()
    Dim rows As Integer = 0
    Integer.TryParse(ddlNumCheck.SelectedValue, rows)
    ' 限制最大行数为3,符合业务规则
    rows = Math.Min(rows, 3)
    
    Dim items As New List(Of ItemsModel)()
    For i As Integer = 0 To rows - 1
        items.Add(New ItemsModel())
    Next
    
    DynamicRepeater.DataSource = items
    DynamicRepeater.DataBind()
End Sub

' ddlNumCheck的选择变化事件
Protected Sub ddlNumCheck_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    BindRepeaterByNumCheck()
End Sub

' 页面加载时调用(编辑页面在IsPostBack为False时加载数据)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        ' 假设ID从URL获取
        Dim recordID As Integer = Integer.Parse(Request.QueryString("ID"))
        LoadRecord(recordID)
    End If
End Sub

前端Repeater代码修正(移除多余属性)

<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>
        </table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:DropDownList ID="ddlWater" AppendDataBoundItems="true" runat="server">
                    <asp:ListItem Text="Select" Value="" Selected="True" />
                </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 />

关键说明

  • 确保mainTable中存储了ddlNumCheck的选中值(字段名NumCheckValue需根据实际表结构调整)
  • 调用ddlAssets_SelectedIndexChanged是为了保证ddlNumCheck能根据ddlAssets的选中值正确填充选项,避免设置默认值时出现选项不存在的情况
  • BindRepeaterByNumCheck方法限制最大行数为3,符合业务规则中选择3及以上时显示3行的要求

内容的提问来源于stack exchange,提问作者Tairoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:55:01