2010-12-14 4 views
1

Hat jemand irgendwelche Vorschläge, wie ich ein DataSet, das ich erstellt habe, durch Analysieren von Excel aufnehmen und es auf meiner MVC2-Website mit dem MVCContrib-Grid anzeigen kann?Anzeigen eines dynamischen DataSet mit dem MVCContrib-Grid

Mit meiner App können Personen Tabellen hochladen, sie überprüfen und die Daten importieren, wenn keine Fehler vorliegen.

Jede Tabelle besteht aus ungefähr dreißig Spalten, die benötigt werden, und einer Anzahl von kundenspezifischen Feldern, die auf dem Server definiert sind und möglicherweise nicht in der Tabelle vorhanden sind. Die Spaltennamen stimmen überein und sind vorbestimmt.

Ich muss jede Spalte in der Tabelle mit dem entsprechenden Feld in der Datenbank übereinstimmen und die Ergebnisse dem Benutzer zur Vorschau präsentieren.

Irgendwelche Ideen, wie man ein anzuzeigendes Raster erzeugt, würden geschätzt.

Antwort

0

Dies ist möglich, indem Sie ein benutzerdefiniertes GridModel erstellen. Hier basierte ich mein Grid auf einem IList gefüllt mit ID Dictionaries, aber dies sollte auch mit Daten aus einer DataTable möglich sein. Der Trick besteht darin, dem Konstruktor des benutzerdefinierten GridModel die Datenstruktur zu geben und das benutzerdefinierte GridModel Spalten basierend auf der Datenstruktur generieren zu lassen. Es ist ein bisschen hässlich, aber es funktioniert gut. (und es ist noch hässlicher in VB.NET mit der witzigen, Lambda-Ausdrücke)

Der Controller Aktionscode:

Dim list As IList(Of IDictionary(Of String, String)) = New List(Of IDictionary(Of String, String)) 
Dim row1 As IDictionary(Of String, String) = New Dictionary(Of String, String)() 
row1.Add("Column1", "ValueColumn1Row1") 
row1.Add("Column2", "ValueColumn2Row1") 
Dim row2 As IDictionary(Of String, String) = New Dictionary(Of String, String)() 
row2.Add("Column1", "ValueColumn1Row2") 
row2.Add("Column2", "ValueColumn2Row2") 
list.Add(row1) 
list.Add(row2) 
ViewData("DynamicData") = list 

Der Brauch GridModel:

Public Class DynamicGridModel 
Inherits MvcContrib.UI.Grid.GridModel(Of IDictionary(Of String, String)) 

    Public Sub New(ByVal dataToRender As IList(Of IDictionary(Of String, String))) 
     If dataToRender.Count > 0 Then 
      For Each name As String In dataToRender(0).Keys 
       Dim columnName As String = name 
       Column.For(Function(rowData As IDictionary(Of String, String)) rowData(columnName)).Named(columnName) 
      Next 
     End If 
    End Sub 

End Class 

Die Syntax in der Ansicht:

Html.Grid(Of IDictionary(Of String, String))("DynamicData").WithModel(New DynamicGridModel(ViewData("DynamicData"))) 
Verwandte Themen