2010-05-04 5 views
1

J'essaie d'utiliser un GridView pour afficher une liste de composants dans ASP.NET. J'essaie de le rendre modifiable en même temps. Une des colonnes est une chaîne qui doit être sélectionnée dans une liste lorsque l'utilisateur modifie la ligne.gridview dropbox

J'ai essayé ce qui suit:

  1. Convertir la ligne BoundField à un ItemTemplate
  2. Ajouter un dropbox à la fenêtre de modèle dans le gridview
  3. lié SelectedItem à la chaîne

À ce stade, j'obtiens une erreur car les éléments de la liste n'ont pas été configurés dans la boîte de dépôt. Donc, je suppose que les deux choses que je me demande sont:

  1. Comment affecter les éléments de la boîte de dépôt à une liste d'options créées dynamiquement?
  2. Comment faire pour que la zone de dépôt n'apparaisse que lorsque la ligne est en cours de modification?

Ok donc j'ai découvert le champ "EditItemTemplate" en studio visuel, qui répond # 2.

Et maintenant j'ai découvert que la boîte de dépôt possède un champ de source de données qui peut être lié à une propriété dans l'objet de données, et qui contient la liste d'options.

+0

Montrez-nous votre code GridView, et le code derrière. – TheGeekYouNeed

+0

Donc, je suis assez nouveau pour la liaison de données et ASP ... J'essaie vraiment de comprendre comment construire ces rapports dans le concepteur plutôt que de corriger un bug. Mon code-behind n'a vraiment que les données auxquelles je suis lié (fonctionne). Le balisage généré fonctionne. Je ne sais pas conceptuellement comment lier les options listitem dropbox dans le concepteur de studio visuel. – tbischel

Répondre

0

Dans votre DropDownList vous pouvez affecter un événement OnDataBinding puis l'événement pour remplir votre DropDownList avec des données personnalisées.

Exemple:

<Columns> 
    <asp:TemplateField> 
     <EditItemTemplate> 
      <asp:DropDownList ID="yourDropDownList" runat="server" 
       DataTextField="YourTextFieldName" DataValueField="YourValueFieldName" 
       OnDataBinding="yourDropDownList_DataBinding"></asp:DropDownList> 
     </EditItemTemplate> 
    </asp:TemplateField> 
</Columns> 

Puis dans votre code derrière l'outil OnDataBinding:

protected void yourDropDownList_DataBinding(object sender, System.EventArgs e) 
{ 
    DropDownList ddl = (DropDownList)(sender); 
    // GetMyDropDownListData should return cached data so your not hitting your DB 
    // each time. You can customize the data for each row here. Use the Eval command 
    // to access the current rows databound values. 
    ddl.DataSource = GetMyDropDownListData(); 
    ddl.DataBind(); // Now all the options will be loaded 

    // Set the current field's selected value 
    ddl.SelectedValue = Eval("YourSelectedValueFieldName").ToString(); 
} 

espoir qui aide.