#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) Если веб-служба не может функционировать без набора результатов другого запроса, то веб-служба не очень хорошо инкапсулирована, и можно утверждать, что внешний запрос действительно принадлежит веб-службе, если он является неотъемлемой частью ее функционирования.