Я пытаюсь написать пользовательский элемент управления. Я хочу разрешить его пользователю указывать DataSourceId (так же, как GridView, Repeater и т. Д.).
Я могу найти источник данных, который соответствует идентификатору. И я могу получить связанный DataSourceView. Но единственный способ получить данные - это асинхронный метод Select. Конечно, я могу настроить обратный вызов так, чтобы мой код блокировался до тех пор, пока обратный вызов не произойдет. Но это требует так много странных вращений, что я подозреваю, что делаю что-то не так.
Если я хочу, чтобы элемент управления функционировал как некоторые другие элементы управления данными ASP.NET, что мне делать по-другому?
Вот что я написал:
string dataSourceId = "SomeDataSourceForTesting";
protected override void RenderContents(HtmlTextWriter writer)
{
IDataSource ds = (IDataSource)Parent.FindControl(dataSourceId);
List<string> viewNames = new List<string>();
foreach(string name in ds.GetViewNames())
{
viewNames.Add(name);
}
string viewname = viewNames[0];
writer.WriteLine("the viewname is " + viewname);
DataSourceView view = ds.GetView(viewname);
view.Select(...); //this really has to be asynchronous?
//write out some stuff from the data source
}