2010-07-28 4 views
0

Dans asp.net, un WebControl doit parfois référencer un autre contrôle Web tel que le gridview a besoin de l'ID de l'objet de source de données auquel il va se lier.Webcontrol en tant que propriété d'un autre contrôle Web

J'ai une propriété de mon webcontrol qui est une chaîne (l'id du webcontrol que je veux référencer). Comment accéder au webcontrol actuel en fonction de cet identifiant?

Répondre

1
+0

Le FindControl ne regarde que dans un conteneur donné. Mais si c'est le seul outil disponible pour cette situation, alors la solution est de construire une méthode récursive qui traverse la structure de la page et renvoie le contrôle correspondant à l'identifiant fourni. – SynBiotik

+0

hmm ... mais Page.FindControl() ne cherche-t-il pas sur toute la page? – cRichter

+0

"La méthode FindControl peut être utilisée pour accéder à un contrôle dont l'ID n'est pas disponible au moment de la conception.La méthode recherche uniquement le conteneur immédiat ou de niveau supérieur de la page, elle ne recherche pas de façon récursive nommer les conteneurs contenus dans la page Pour accéder aux contrôles dans un conteneur d'attribution de noms subordonné, appelez la méthode FindControl de ce conteneur. " - http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx – SynBiotik

0

Voici un échantillon d'un GridView lié à un liant ObjectDataSource, avec le ObjectDataSource à un DropDownList pour un paramètre. Cela devrait vous aider à démarrer.

<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

La question qui reste est: est-ce que gridview localise ObjectDataSource en parcourant la page de manière récursive à l'aide de la méthode FindControl? – SynBiotik

+0

@SynBiotik, no. Le champ DataSourceID du balisage GridView identifie ObjectDataSource par l'ID de la source de données. La liaison est explicite (dans l'exemple de code ci-dessus, "CustomerObjectDataSource"). –

+0

IHere est le code DataSourceID: chaîne publique virtuelle DataSourceID {{ obtenir objet obj2 = this.ViewState [ "DataSourceID"]; if (obj2! = Null) { return (string) obj2; } return string.Empty; } { mis si { this._requiresBindToNull = true (String.IsNullOrEmpty (valeur) && String.IsNullOrEmpty (this.DataSourceID)!); } this.ViewState ["DataSourceID"] = valeur; this.OnDataPropertyChanged(); } } Comment le gridview lie-t-il la chaîne à l'objet réel? – SynBiotik

Questions connexes