2011-03-31 2 views
0

J'ai développé une commande usercontrol, mais je n'arrive pas à trouver comment gérer des données sur une propriété de la commande usercontrol dans une vue détaillée.Liaison de données sur une propriété d'un UserControl dans DetailsView

La propriété est définie ainsi:

<Bindable(True, BindingDirection.TwoWay)> 
Public Property Value As String 
    Get 
     Return combobox.SelectedValue 
    End Get 
    Set(value As String) 
     combobox.SelectedValue = value 
    End Set 
End Property 

Mon databinding dans mes détails voir est fait de cette façon:

<myctls:DropDown runat="server" 
       ID="ctlSupplier" 
       Value='<%#Bind("supplier_id") %>' /> 

Chaque fois que j'essaie de Databind, je reçois l'exception suivante:

Les méthodes de liaison de données telles que Eval(), XPath() et Bind() peuvent uniquement être utilisées dans le contexte d'un contrôle de databound.

Quelqu'un a-t-il eu des idées sur la façon de rendre possible la transmission de données sur une propriété d'un contrôle utilisateur?

* Edit 1: Ajout DetailsViewCode et objet * datasource

<asp:DetailsView runat="server" ID="dvMain" DataSourceID="odsReception" AutoGenerateRows="false" GridLines="None" DefaultMode="Edit"> 
    <Fields> 
    <asp:TemplateField HeaderText="Supplier"> 
     <ItemTemplate> 
     <myctls:DropDown runat="server" ID="ctlSupplier" Width="255" Value='<%#Bind("supplier_id") %>' />                              
     </ItemTemplate> 
    </asp:TemplateField> 

    [... bunch of fields ...] 
    </Fields> 
</asp:DetailsView> 

<asp:ObjectDataSource runat="server" ID="odsReception" DeleteMethod="Delete" 
     InsertMethod="Insert" SelectMethod="Select" 
     TypeName="DataAccess.Reception" 
     UpdateMethod="Update"> 

    <SelectParameters> 
     [... Bunch of parameters ...] 
    </SelectParameters> 

    [... Parameters for other methods ...] 
</asp:ObjectDataSource> 

Répondre

1
Protected Sub DetailsView1_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles DetailsView1.DataBound 

      Dim drv As DataRowView = CType(DetailsView1.DataItem,DataRowView) 
      Dim supplierId As String = CType(drv("supplier_id"),String) 
      Dim ctrl As MyUCControl = CType(DetailsView1.FindControl("ctlSupplier"),MyUCControl) 
      If (Not (ctrl) Is Nothing) Then 
       ctrl.Value = supplierId 
      End If 

    End Sub 

« besoins

Imports System.Data 
+0

Eh bien ... Je sais que je peux utiliser pour CodeBehind databinding, mais je recherche d'une solution pour utiliser la liaison de données à partir du fichier aspx. – Martin

+0

Votre code devrait aussi fonctionner. Peut être quelque chose d'autre un problème. Pouvez-vous partager votre code DetailsView aussi bien. – gbs

+0

Enfin, il s'est avéré que j'avais un conflit de liaison de données entre le code dans mon contrôle et ma vue détaillée. Une fois que j'ai corrigé l'erreur, mon code de liaison de données a commencé à fonctionner. – Martin

Questions connexes