1

我有一个 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();
4

1 回答 1

3

有很多方法可以做到这一点。可能最简单的方法是通过循环 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 服务内部。

于 2011-10-13T07:40:04.463 回答