在向数据库中插入记录时,有两个表单下拉列表对我们的业务规则至关重要,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 />