2010-12-14 3 views
1

Excel 파싱으로 작성한 데이터 세트를 MVCContrib의 격자를 사용하여 MVC2 웹 사이트에 표시하는 방법에 대한 제안 사항이 있습니까?MVCContrib 그리드를 사용하여 동적 데이터 세트 표시

내 앱을 사용하면 오류가없는 경우 스프레드 시트를 업로드하고 검토하고 가져올 수 있습니다.

각 스프레드 시트는 필수 열 약 30 개와 서버에 정의되어 있고 스프레드 시트에 있거나 없을 수도있는 클라이언트 특정 필드로 구성됩니다. 열 이름이 일치하고 미리 결정됩니다.

스프레드 시트의 각 열과 데이터베이스의 해당 입력란을 일치시켜 결과를 사용자에게 제시하여 미리보기해야합니다.

그리드를 표시하는 방법에 대한 아이디어는 만족 스러울 것입니다.

답변

0

사용자 지정 GridModel을 만들면 가능합니다. 여기에 ID 표를 채운 IList에서 그리드를 기반으로하지만 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")))