La moitié de la bataille d'obtenir une réponse est de savoir comment poser la question. Je ne suis pas certain que je fais un bon travail, mais c'est mon meilleur coup.
J'essaie de lier un DDL avec des données à l'intérieur d'une grille qui ne vient pas de la grille elle-même. Ceci est dans la sortie EdiTemTemplate. Le but de le faire est de donner à l'utilisateur, de démarrer, d'une valeur sélectionnée et d'une série d'autres valeurs à partir d'une procédure stockée de recherche. P>
Je vais mentionner ici que je l'ai fait avec succès avant, mais en utilisant un objetDataSource. J'essaie d'éviter cela cette fois et de le faire entièrement du code derrière pour l'instant, déplacez-le ensuite à une couche de données plus tard. P>
Voici ce que j'ai jusqu'à présent ... p> ... p> .... p> .... p> Je comprende les deux derniers, ainsi que d'autres approches que je 'J'ai essayé et échoué. P> ... P> Protected Sub usersGrid_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowState = DataControlRowState.Edit Then
Dim ddl As DropDownList = DirectCast(e.Row.FindControl("ddl_GetLists"), DropDownList)
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
ddl.DataSource = ds
ddl.DataBind()
End If
End Sub
Public Function BindDropdown() As DataSet
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
ddl_GetLists.DataSource = ds
ddl_GetLists.DataBind()
End Function
4 Réponses :
Vous avez quelques options. Vous pouvez utiliser un contrôle de DataSource ou vous pouvez lier les fichiers déroulants dans le code-code dans l'événement code> rowdatabound code> de la grilleview.
J'ai remarqué deux problèmes dans votre code aussi. Dans votre exemple, vous affectez le code> DataSourceid code> de manière incorrecte. Le Si vous voulez faire la liaison dans le code-Code-derrière, vous peut faire cela via le datasourceid code> doit pointer sur l'ID d'un contrôle de données de DataSource sur la page: p>
Rowdatabound CODE> Event: P>
Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow AndAlso (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
Dim ddl As DropDownList = TryCast(e.Row.FindControl("ddl_GetLists"), DropDownList)
If ddl IsNot Nothing Then
ddl.DataSource = RetrieveDataSource()
ddl.DataBind()
End If
End If
End Sub
J'ai fait avec succès quelque chose de similaire à celui-ci en utilisant un objetDataSource dans le passé, mais j'essaie de le faire exclusivement du code derrière cette heure. Est-ce possible?
Concernant la propriété Connectionstrings. L'application que j'ai été affectée à ajouter utilise une clé dans Appsettings au lieu de l'attribut Normal ConnectionsRing du fichier de configuration. Existe-t-il un moyen de l'appeler de Sqldatasource?
@Johnkinane: Je pense que vous pouvez toujours lier onRowdatabound code>. J'ai édité ma réponse pour lier la liste déroulante si la ligne est en mode édition.
Oui. Son objectif est de permettre à l'utilisateur de sélectionner différentes options à partir d'une recherche SP.
@Jamesjohnson: Je suis confronté au même problème, je ne peux pas obtenir les valeurs de la liste déroulante qui se trouve à l'intérieur de la grille. Et j'ai besoin du même code VB en C #. Aidez-moi, s'il vous plaît
Je vois quelques problèmes.
Protected Sub usersGrid_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) usersGrid.EditIndex = e.NewEditIndex BindData() End Sub
La deuxième partie de votre réponse est incorrecte. Il ne devrait pas y avoir de problème de trouver le contrôle à l'aide de cet identifiant.
Je dois noter que lors de l'utilisation de VS 2010 que le contrôle DDL, tandis que dans le réseau GridView est "non" visible "à l'application, mais lorsque je le sors de la grille, il" est ". Je n'ai aucune explication à cela.
Vous pouvez simplement créer une liste globale de type que vous souhaitez et le définir comme null
Si vous utilisez LINQ, mettez simplement cette source dans le DropdownListObject.DataSource espoir qu'il sera utile. p> p>
Vous fixez ceci:
Dans la page Code, vous définissez une fonction publique getListData () (je pense que vous avez fait). p> li>
Utilisez la propriété DataSource (si vous souhaitez appeler une fonction): p>
<asp:DropDownList ID="ddl_GetLists" DataSource='<%# GetListData() %>' AppendDataBoundItems="true" DataValueField="listID" DataTextField="listName" SelectedValue='<%#Bind("listID") %>' runat="server" > </asp:DropDownList>
Merci pour votre réponse. Vous pouvez mettre des chevreakes dans votre contenu si vous laissez 2 espaces à la fin de la ligne. Cela rend la réponse plus claire.