2010-12-14 60 views
1

Est-ce que quelqu'un a des suggestions sur la façon dont je peux prendre un DataSet que j'ai créé en analysant Excel et l'afficher dans mon site Web MVC2 en utilisant la grille de MVCContrib?Affichage d'un DataSet dynamique à l'aide de la grille MVCContrib

Mon application permet aux utilisateurs de télécharger des feuilles de calcul, de les consulter et d'importer les données s'il n'y a pas d'erreurs.

Chaque feuille de calcul comprend une trentaine de colonnes obligatoires et un certain nombre de champs spécifiques au client qui sont définis sur le serveur et peuvent être présents ou non dans la feuille de calcul. Les noms de colonnes correspondent et sont prédéterminés.

Je dois faire correspondre chaque colonne de la feuille de calcul avec le champ approprié dans la base de données et présenter les résultats à l'utilisateur pour prévisualiser.

Des idées sur la façon de générer une grille à afficher seraient appréciées.

Répondre

0

Il est possible de créer un GridModel personnalisé. Ici, j'ai basé ma grille sur un IList rempli d'IDictionnaires, mais cela devrait aussi être possible avec des données provenant d'un DataTable. L'astuce consiste à donner la structure de données au constructeur du GridModel personnalisé et laisser le GridModel personnalisé générer des colonnes en fonction de la structure de données. C'est un peu moche, mais ça marche bien. (et il est encore plus laid en VB.NET avec les drôles d'expressions lambda)

Le code d'action du contrôleur:

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 

Le GridModel personnalisé:

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 

La syntaxe dans la vue:

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