Wörterbuch an GridView binden

Bezugnehmend auf diesen Thread:Algorithmus zum Zählen der Zeit, die im selben Zeitraum verstrichen ist, wie binde ich das Wörterbuch an das GridView? Bitte werfen Sie einen Blick auf die Antwort.

Ich habe versucht, ein GridView und dann auf den Code-Behind hinzuzufügen:GV.DataSource = timeRangeCounts und binde es, aber im Gegenzug:

The data source for GridView with id 'GV' did not have any properties or attributes from which to generate columns. Ensure that your data source has content.

Wie kann ich das machen? Bitte sehen Sie sich den folgenden Code an:

Die erste Helferklasse wird verwendet, um die Anzahl der genauen Übereinstimmungen und Übereinstimmungen im Unterbereich zu speichern:

<code>Public Class TimeRangeCounter
    Property ExactRangeMatch as Integer
    Property SubRangeMatch as Integer
End Class
</code>

Die zweite Hilfsklasse wird verwendet, um dem Wörterbuch mitzuteilen, wie ein Schlüssel (vom TypTimeRange) unterscheidet sich von anderen:

<code>Public Class TimeRangeEqualityComparer 
    Implements IEqualityComparer(Of TimeRange)

    Public Overloads Function Equals(left As TimeRange, right As TimeRange) _
            As Boolean Implements IEqualityComparer(Of TimeRange).Equals           

        Return left.ToString = right.ToString   
    End Function

    Public Overloads Function GetHashCode(range As TimeRange) _
            As Integer Implements IEqualityComparer(Of TimeRange).GetHashCode

        return range.ToString().GetHashCode()
    End Function

End Class
</code>

Die dritte Hilfsklasse speichert die Start- und Endzeiten eines Bereichs:

<code>Public Class TimeRange 
    Private readonly _start
    Private readonly _end

    Public Readonly Property Start 
        Get
           return _start
        End Get
    End Property

    Public Readonly Property [End] 
        Get
           return _end
        End Get
    End Property

    Public Sub New(start As String, [end] As string)
        Me._start = start
        Me._end = [end]
    End Sub

    Public Overrides Function ToString() as String
       Return String.Format("{0}-{1}", Start, [End])
    End Function

End Class
</code>

Wenn wir also das Obige verwenden, sollten wir in der Lage sein, diesen Algorithmus zu schreiben:

<code>Dim columnLength As Integer = 5
Dim timeStart() As String = {"08.00", "08.00", "10.00", "08.00", "08.00"}
Dim timeEnd() As String = {"08.50", "11.50", "11.00", "09.00", "08.50"}
Dim comparer As New TimeRangeEqualityComparer()
Dim timeRangeCounts As New Dictionary(Of TimeRange, TimeRangeCounter)(comparer)

'Count exact range matches while building dictionary
For i = 0 to columnLength - 1
  Dim key As TimeRange = New TimeRange(timeStart(i), timeEnd(i))

  If timeRangeCounts.ContainsKey(key)
      timeRangeCounts(key).ExactRangeMatch += 1
  Else
      Dim counter =  New TimeRangeCounter()
      counter.ExactRangeMatch = 1
      timeRangeCounts(key) = counter
  End If        

Next           

'Count sub ranges          
For Each kvp in timeRangeCounts
    For Each key in timeRangeCounts.Keys
        If kvp.key.Start >= key.Start AndAlso _ 
           kvp.Key.End <= key.End AndAlso _
           kvp.key.ToString <> key.ToString then           

            kvp.Value.SubRangeMatch += 1
        End If
    Next
Next

'Console.WriteLine(timeRangeCounts)
    GV.DataSource = timeRangeCounts
    GV.DataBind()
</code>

Der Gridview:

<code><asp:GridView ID="GV" runat="server">
    <Columns>
        <asp:BoundField DataField="Key" HeaderText="Dictionary Key" />
        <asp:BoundField DataField="Value" HeaderText="Dictionary Value" />
    </Columns>
</asp:GridView>
</code>

Dann habe ich versucht, es auszuführen, aber das Ergebnis ist wie folgt:

<code>Dictionary Key    Dictionary Value
08:00:00-08:50:00 TimeRangeCounter
08:00:00-09:40:00 TimeRangeCounter
10:00:00-11:40:00 TimeRangeCounter
...               ...
</code>

Was ist los mit dem Code?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage