我有一个下拉列表,并为其分配了存储过程的结果。存储过程从1990年到2050年返回年份,并且一些值是重复的(ex ... 1990多次,1999:4次......等)。现在我想删除这些重复项,并且我需要仅在基于当前年份的下拉列表中显示正/负5年。例如,当前年份是2017年,因此我需要在2012年(2017-5)至2022(2017 + 5)的下拉列表中显示。
我试过的示例代码:
Public Shared Sub RemoveDuplicateItems(ddl As DropDownList)
For i As Integer = 0 To ddl.Items.Count - 1
ddl.SelectedIndex = i
Dim str As String = ddl.SelectedItem.ToString()
For counter As Integer = i + 1 To ddl.Items.Count - 1
ddl.SelectedIndex = counter
Dim compareStr As String = ddl.SelectedItem.ToString()
If str = compareStr Then
ddl.Items.RemoveAt(counter)
counter = counter - 1
End If
Next
Next
For i As Integer = 0 To ddl.Items.Count - 1
ddl.SelectedIndex = i
Dim str As String = ddl.SelectedItem.ToString()
If str <= Convert.ToString(Now.Year - 5) OrElse str >= Convert.ToString(Now.Year + 5) Then
ddl.Items.RemoveAt(i)
End If
Next
End Sub
但它没有按预期工作。第一部分基本上是为了删除重复,这很好,当谈到第二部分时,我遇到了限制正/负5年的问题。有人可以让我知道如何解决?
答案 0 :(得分:2)
'Get distinct items'
Dim distinct = ddl.Items.Cast(Of Integer).Distinct().ToList()
'Get -5/+5 range from now'
Dim offsetPlus = DateTime.Now.AddYears(5)
Dim offsetMinus = DateTime.Now.AddYears(-5)
Dim yearRange = distinct.Where(Function(x) x <= offsetPlus.Year AndAlso x >= offsetMinus.Year)
'Clear and re-add items'
ddl.Items.Clear()
For Each item In yearRange
ddl.Items.Add(item)
Next
如果您的DropDownList项目确实是字符串类型,则必须调整Cast
来电中的Distinct
并将ToString
添加到yearRange.Where
功能。
但我建议使用Integer。