2010-10-15 8 views
1

Faisant suite à la question ici: Complex editing on a gridview in C#Gridview dans un gridview - en utilisant une valeur de ligne parente comme paramètre dans ASP.NET?

J'ai l'exemple suivant gridview: alt text

Ce que je suis en train de faire est que chaque fois que je clique sur « Edit », les feuilles à la colonne devient gridview dans laquelle les Heures pour la date respective apparaissent. Cependant, je ne sais pas comment récupérer la date respective en tant que paramètre pour la source de données de l'enfant GridView.

Par exemple, j'ai essayé:

<SelectParameters> 
       <asp:ControlParameter ControlID="cphContent$EntryDate" Name="pDate" 
        PropertyName="MyDate" Type="DateTime" /> 
</SelectParameters> 

Mais cela ne fonctionne pas, et même si elle a fait comment puis-je dire à sa récupérer la date respective pour la ligne sélectionnée?

Si quelqu'un connaît une meilleure approche, il serait très apprécié.

Merci à l'avance, Eton B.

Répondre

2

Je ne pense pas que vous pouvez utiliser un BoundField gridview en tant que paramètre de contrôle de cette façon. Ce que je voudrais faire est:

  1. Réglez la date en tant que clé de données dans le parent GridView
  2. Ajouter un gestionnaire d'événements pour le parent GridView événement RowEditing.
  3. Dans ce cas, régler le SelectParameter de la source de données à la date de la ligne éditée

La GridView mère ressemblerait à ceci:

<asp:GridView ID="ParentGridView" runat="server" DataSourceID="ParentObjectDataSource" 
    OnRowEditing="ParentGridView_RowEditing" DataKeyNames="Date"> 

Ensuite, vous auriez une source de données pour l'enfant GridView comme si:

<asp:ObjectDataSource ID="ChildObjectDataSource" runat="server" SelectMethod="Blah" TypeName="Blah"> 
    <SelectParameters> 
     <asp:Parameter Type="DateTime" Name="Date" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

Puis dans le code derrière, vous auriez le gestionnaire d'événements comme celui-ci RowEditing:

protected void ParentGridView_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    ChildObjectDataSource.SelectParameters["Date"].DefaultValue = GridView1.DataKeys[e.NewEditIndex][0].ToString(); 
} 
+0

Donner un coup de feu, merci. Dans le code derrière, vous ne voulez pas dire ChildObjectDataSource.SelectParameters? –

+0

Merci, oui je l'ai fait. J'ai édité la réponse pour refléter cette correction. – kevev22

+0

Merci, jusqu'à présent votre solution semble bonne. Je ne reçois plus d'erreurs et ce que vous faites est logique. Cependant, en cliquant sur Modifier, la colonne Leaves At est littéralement vide. Voici le balisage pour le gridview enfant que j'utilise: http://pastebin.com/nUkCy4iu –