我有一个ASP。. NET数据中继器。当前将其设置为从SQL查询获得的数据源,如下所示:
IDataReader dr = GetData(sql);
myRepeater.DataSource = dr;
myRepeater.DataBind();
这工作得很好,但我现在要做的是调用web服务,传递从SQL查询返回的所有数据,并使其可用于中继器。所以,我的问题是,我可以在绑定之前操作数据读取器对象,或者之后操作数据中继器来实现这一点;例如:
IDataReader dr = GetData(sql);
var extraData = CallWS(dr);
foreach (MyData d in extraData)
{
dr.AddField(d.Value);
}
myRepeater.DataSource = dr;
myRepeater.DataBind();
有很多方法可以做到这一点。可能最简单的方法是通过循环DataReader将第一个查询的值放入集合中,然后将它们添加到集合中。然后调用web服务并将这些结果也附加到集合中。然后,您将拥有一个包含所有结果的集合,您可以将其绑定到中继器。
IDataReader dr = GetData(sql);
var dataCollection = new List<string>();
while(reader.Read())
{
dataCollection.Add(reader.GetString(1));
}
var extraData = CallWS();
while(extraData.Read())
{
dataCollection.Add(extraData.GetString(1));
}
myRepeater.DataSource = dataCollection;
myRepeater.DataBind();
类似于上面的内容。没有那么多额外的代码。我知道您没有将结果传递到web服务,但我建议不要这样做,原因如下:
1)额外的数据传输。将结果传递给web服务让web服务再次传递它们是没有意义的(除非它们需要作为查询的一部分)。2)如果web服务不能在没有其他查询结果的情况下工作,那么web服务就没有很好地封装,如果外部查询是其功能的组成部分,那么可以认为外部查询确实属于web服务。