Отображение динамического набора данных с использованием сетки MVCContrib - PullRequest
1 голос
/ 14 декабря 2010

Есть ли у кого-нибудь предложения о том, как я могу взять созданный мной DataSet путем анализа Excel и отобразить его на своем веб-сайте MVC2 с помощью сетки MVCContrib?

Мое приложение позволяет пользователям загружать электронные таблицы, просматривать их и импортироватьданные, если ошибок нет.

Каждая электронная таблица состоит из примерно тридцати столбцов, которые требуются, и ряда специфических для клиента полей, которые определены на сервере и могут присутствовать или не присутствовать в электронной таблице.Имена столбцов будут совпадать и будут определены заранее.

Мне нужно сопоставить каждый столбец электронной таблицы с соответствующим полем в базе данных и представить результаты пользователю для предварительного просмотра.

Любые идеио том, как создать сетку для отображения будет принята.

1 Ответ

0 голосов
/ 13 июля 2011

Это возможно путем создания пользовательской GridModel.Здесь я основал свою сетку на IList, заполненном IDictionaries, но это также должно быть возможно с данными, взятыми из DataTable.Хитрость заключается в том, чтобы дать структуру данных конструктору пользовательской GridModel и позволить пользовательскому GridModel генерировать столбцы на основе структуры данных.Это немного некрасиво, но работает хорошо.(и это еще страшнее в VB.NET с забавными лямбда-выражениями)

Код действия контроллера:

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

Пользовательская 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

синтаксис в представлении:

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