2010-07-28 7 views
0

В asp.net иногда webcontrol должен ссылаться на другой webcontrol, такой как gridview требуется идентификатор объекта источника данных, к которому он привязан.Webcontrol как свойство другого webcontrol

У меня есть свойство моего webcontrol, которое является строкой (идентификатор webcontrol, который я хочу ссылаться). Как получить доступ к фактическому webcontrol на основе этого идентификатора?

ответ

1
+0

FindControl только смотрит в любом контейнере. Но если это единственный инструмент, доступный для этой ситуации, то решение заключается в создании рекурсивного метода, который пересекает структуру страницы и возвращает элемент управления, соответствующий указанному идентификатору. – SynBiotik

+0

hmm ... но не Page. FindControl() поиск по всей странице? – cRichter

+0

Нельзя использовать: «Метод FindControl может использоваться для доступа к элементу управления, идентификатор которого недоступен во время разработки. Метод ищет только контейнер немедленного или верхнего уровня страницы, он не рекурсивно ищет элементы управления в именования контейнеров, содержащихся на странице. Чтобы получить доступ к элементам управления в подчиненном контейнере имен, вызовите метод FindControl этого контейнера ». - http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx – SynBiotik

0

Вот образец из GridView, связанным с ObjectDataSource, с ObjectDataSource привязки к DropDownList для параметра. Это должно заставить вас начать.

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataSourceID="CustomerObjectDataSource" 
    DataKeyNames="CustomerID" 
    AllowPaging="True" 
    AllowSorting="True" AutoGenerateDeleteButton="True" 
    AutoGenerateEditButton="True" AutoGenerateSelectButton="True" 
    onrowdeleted="GridView1_RowDeleted" onrowupdated="GridView1_RowUpdated"> 
    <Columns> 
     ... 
    </Columns> 
</asp:GridView> 

<asp:ObjectDataSource ID="CustomerObjectDataSource" runat="server" 
    EnablePaging="True" 
    MaximumRowsParameterName="totalRows" 
    StartRowIndexParameterName="firstRow" 
    TypeName="Northwind.Business.CustomerSource" 
    DataObjectTypeName="Northwind.Business.CustomerDTO" 
    SelectMethod="Load" 
    UpdateMethod="Save" 
    InsertMethod="Insert" 
    DeleteMethod="Delete" 
    SelectCountMethod="CustomerCount" 
    SortParameterName="sortExpression"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="ddlRegion" Name="region" 
      PropertyName="SelectedValue" /> 
    </SelectParameters> 
</asp:ObjectDataSource>  
+0

Остается вопрос: отображает ли gridview объект ObjectDataSource путем рекурсивного перемещения страницы с помощью метода FindControl? – SynBiotik

+0

@SynBiotik, no. Поле DataSourceID разметки GridView идентифицирует объект ObjectDataSource идентификатором источника данных. Связывание является явным (в приведенном выше примере, «CustomerObjectDataSource»). –

+0

IHere это код DataSourceID: публичных виртуальная строка DataSourceID { получить { объекта obj2 = this.ViewState [ "DataSourceID"]; если (obj2! = Null) { возвращение (строка) obj2; } return string.Empty; } установить { , если { this._requiresBindToNull = TRUE (string.IsNullOrEmpty (значение) && string.IsNullOrEmpty (this.DataSourceID)!); } this.ViewState ["DataSourceID"] = значение; this.OnDataPropertyChanged(); } } Как gridview привязывает строку к реальному объекту? – SynBiotik