有没有人对如何通过解析Excel创建我创建的DataSet并使用MVCContrib的网格在我的MVC2网站上显示它有任何建议?
我的应用可让人们上传电子表格,查看并在没有错误的情况下导入数据。
每个电子表格包含大约30列所需的列以及在服务器上定义的许多客户特定字段,这些字段可能存在也可能不存在于电子表格中。列名称将匹配并且是预先确定的。
我需要将电子表格中的每一列与数据库中的相应字段进行匹配,并将结果显示给用户进行预览。
有关如何生成要显示的网格的任何想法都将受到赞赏。
答案 0 :(得分:0)
可以通过创建自定义GridModel来实现。 在这里,我将网格基于一个充满IDictionaries的IList,但这也应该可以从DataTable中获取数据。 诀窍是将数据结构提供给自定义GridModel的构造函数,并让自定义GridModel根据数据结构生成列。 它有点难看,但效果很好。 (在VB.NET中使用有趣的lambda表达式甚至更加丑陋)
控制器操作代码:
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")))