После повторного изучения вашего вопроса, я думаю, я понимаю, что вы просите.
Поскольку вы используете идентификатор ObjectDataSource, вам нужно найти этот элемент управления и получить свойство SelectMethod.Затем вам нужно вызвать этот метод, чтобы получить данные, которые будут представлены.Это то, что вы на самом деле не хотите делать, потому что это приводит к гораздо большему количеству проблем, таких как невозможность установить свойство CustomDataSource во фронте кода, так как Page.Controls не заполняется на этом этапе, поэтому вы не можете найти ObjectDataSourceконтроль.Однако вы можете установить это свойство в коде в Page_Load.
Вот пример того, как вы можете это сделать:
Код для управления пользователями:
public partial class MyUserControl : System.Web.UI.UserControl
{
private string customDataSource;
public string CustomDataSource
{
get { return customDataSource; }
set
{
customDataSource = value;
var ctrl = (ObjectDataSource) this.Page.FindControlRecursive(customDataSource);
if (ctrl == null) return;
var m = this.Page.GetType().GetMethod(ctrl.SelectMethod);
if (m == null) return;
var data = m.Invoke(this.Page, BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
checkComboBox.DataSource = data;
checkComboBox.DataBind();
}
}
}
Код для страницы с использованием Usercontrol:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
myCtrl.CustomDataSource = "objectDataSource1";
}
public object GetData()
{
return new List<string> { "1", "2", "3" };
}
}
Где-то на странице вы вставляете свой Usercontrol с чем-то вроде:
<uc:MyUserControl runat="server" id="myCtrl"></uc:MyUserControl>
И, конечно, ObjectDataSource:
<asp:ObjectDataSource runat="server" ID="objectDataSource1" SelectMethod="GetData"></asp:ObjectDataSource>
FindControlRecursive - это простой метод расширения:
public static class ExtensionMethods
{
public static Control FindControlRecursive(this Control control, string id)
{
if (control == null) return null;
if (control.ID == id) return control;
foreach (Control c in control.Controls)
{
var found = FindControlRecursive(c, id);
if (found != null) return found;
}
return null;
}
}