如何从下拉列表中删除重复值和一些特定值?

时间:2017-01-13 06:42:19

标签: c# asp.net vb.net duplicates dropdown

我有一个下拉列表,并为其分配了存储过程的结果。存储过程从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年的问题。有人可以让我知道如何解决?

1 个答案:

答案 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。