我需要将三个 DataTable 连接在一起,并将连接的数据用作 GridView 的 DataSource。第一个 ( localSQLTable
) 通过对 MS-SQL 数据库的查询填充。后两个 (serviceResponse.Tables(0)
和serviceResponse.Tables(1)
) 是使用DataSet.ReadXML
Web 服务的结果构建的。
我已经做到了这一点:
Dim joinedData = From f In localSQLTable _
Join s1 As DataRow In serviceResponse.Tables(0) _
On f.Item("KNum") Equals s1.Item("Number") _
Join s2 As DataRow In serviceResponse.Tables(1) _
On s1.Item("KNumber_Id") Equals s2.Item("KNumber_Id") _
Select Guid = f.Item("Guid"), Num = f.Item("Num"), Desc = f.Item("Desc"), KNum = f.Item("KNum"), KDesc = s2.Item("KDescription_Text"), Type = s2.Item("Type") _
Where (Type.ToString.ToUpper = "LONG_HTML")
myGridView.DataSource = joinedData
myGridView.DataBind()
但是,它似乎joinedData
只是一个 IEnumerable (匿名类型)。我尝试了一些事情,包括以下内容:
- 尝试
joinedData
使用 lambda 函数(我一点也不熟悉)构建为 IEnumerable(Of DataRow) 来构建新的 DataRow - 在结果集上调用
.ToList()
or.AsEnumerable()
(在玩弄类型之后)
主要问题是,无论我似乎尝试什么,使用结果作为我的 GridView 的数据源都有问题 - 我遇到了两个例外之一:
- 具有 id 的 GridView 的数据源没有任何用于生成列的属性或属性。确保您的数据源有内容。
- 数据源不支持服务器端数据分页。
我也知道我可能不应该在我的 Linq 查询中使用.Item ("Field")
强类型来代替.Field (Of T)("Field")
- 我一直在等待这种更改,直到我得到实际可用的数据。
我没有和 Linq 结婚;如果DataSet.Merge
更合适(或其他一些方法),我会招待它。还有一个明显的可能性是,我实际上必须稍后将我所拥有的内容加入另外两个 DataTables。如果是这种情况,我可能会将这些serviceResponse
表合并为一个,所以我仍然只会加入三个表。
那么我该怎么做才能将这些数据连接在一起并将结果用作我的 GridView 的数据源?并且我正在做的任何事情都会比在我的原始 DataTable ( localSQLTable
) 中添加两个额外的列并使用 XML 响应数据逐行填充它们更快吗?