Добавление вторичного источника данных в ASP.NET ретранслятор данных

#c# #asp.net #repeater #idatareader

#c# #asp.net #повторитель #idatareader

Вопрос:

У меня есть ASP.NET повторитель данных. В настоящее время для этого значения задан источник данных, полученный из SQL-запроса, следующим образом:

 IDataReader dr = GetData(sql);
myRepeater.DataSource = dr;
myRepeater.DataBind();
  

Это работает нормально, но то, что я хочу сделать сейчас, это вызвать веб-службу, передав все данные, возвращенные из SQL-запроса, и сделать их доступными для повторителя. Итак, мой вопрос в том, могу ли я манипулировать объектом чтения данных до его привязки или повторителем данных после этого, чтобы достичь этого; например:

 IDataReader dr = GetData(sql);

var extraData = CallWS(dr);    
foreach (MyData d in extraData)
{
    dr.AddField(d.Value);
}

myRepeater.DataSource = dr;
myRepeater.DataBind();
  

Ответ №1:

Есть много способов, которыми вы можете это сделать. Вероятно, самый простой способ — поместить значения из первого запроса в коллекцию, выполнив цикл вокруг DataReader, а затем добавив их в коллекцию. Затем вызовите веб-службу и добавьте эти результаты также в коллекцию. Тогда у вас будет коллекция, содержащая все ваши результаты, которые вы можете привязать к повторителю.

         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();
  

Что-то вроде описанного выше. Это не так уж много дополнительного кода. Я знаю, что вы не передаете результаты в веб-службу, но я бы не советовал этого делать по ряду причин:

1) Дополнительная передача данных. Нет смысла передавать результаты веб-службе, чтобы веб-служба просто передавала их обратно (если они не нужны как часть запроса). 2) Если веб-служба не может функционировать без набора результатов другого запроса, то веб-служба не очень хорошо инкапсулирована, и можно утверждать, что внешний запрос действительно принадлежит веб-службе, если он является неотъемлемой частью ее функционирования.