2017-01-13 3 views
1

私はドロップダウンリストを持っており、私はそれにストアドプロシージャの結果を割り当てました。ストアドプロシージャは1990年から2050年を返し、値の一部は重複しています(例... 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 

をしかし、期待どおりに動作していません。最初の部分は基本的に重複を削除するためのものですが、それは2番目の部分になるとプラスマイナス5年という制限がある問題があります。誰かが私に解決方法を教えてもらえますか?

+0

[Distinct in sql statement]を選択しますか? – OneFineDay

+0

@OneFineDay残念ながら私はストアドプロシージャを変更することはできません..! – Abhi

+0

ハッシュセットを使用すると、重複した値を避けることができます – genespos

答えて

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のアイテムを使用すると、DistinctコールでCastを調整し、yearRange.Where機能にToStringを追加する必要があり、実際に文字列型の場合です。
しかし、Integerを使用することをお勧めします。

関連する問題