2011-12-05 3 views
1

Je ne suis pas sûr de savoir comment corriger le problème suivant. J'ai une liste déroulante qui a une source de données d'objet. Ensuite, dans le code, il y a une méthode comme ceciListe déroulante ne peuplera pas

void InitPageData() 
{ 
    MembershipUser user = Membership.GetUser(); 
    DataSetTableAdapters.MemberInfoTableAdapter da = new DataSetTableAdapters.MemberInfoTableAdapter(); 
    DataSet.MemberInfoDataTable dt = da.GetMember((Guid)user.ProviderUserKey); 
    if (dt.Rows.Count == 1) 
    { 
     DataSet.MemberInfoRow mr = dt[0]; 
     //rank.Text = mr.rank; 
     //position.Text = mr.position; 

     UserName.Text = user.UserName; 
     ... 
    } 

Cette méthode remplit les champs de formulaire sur la page. Ce que j'essaye de faire est d'avoir la liste déroulante de rang peuplée des ods mais emploie cette méthode ci-dessus pour remplir l'article choisi de la liste de rang dropwon avec la ligne rank.Text = mr.rank. Dans cet exemple, la ligne de code qui jette l'erreur est mise en commentaire sinon elle renvoie ceci: "'rank' a une valeur SelectedValue qui n'est pas valide car elle n'existe pas dans la liste des éléments Nom du paramètre: valeur".

J'ai chanté le code à rank.DataTextFiled = mr.rank et rank.DataValueField = mr.rankid.ToString() mais cela a jeté une autre erreur: "DataBinding: 'System.Data.DataRowView' ne contient pas de propriété avec le nom 'Star'. " "Star" est la valeur du mr.rank.

Voici ce que la liste déroulante et les ods ressemblent:

<asp:DropDownList runat="server" ID="rank" CssClass="txtfield" DataSourceID="ODCRanks" 
    DataTextField="Rank" DataValueField="ID" AppendDataBoundItems="True"> 
<asp:ListItem Text="--- Select a Rank ---" Value="-1" />            

<asp:ObjectDataSource ID="ODCRanks" runat="server" 
OldValuesParameterFormatString="original_{0}" SelectMethod="GetRanks" 
TypeName="RanksTableAdapters.RankTableAdapter"></asp:ObjectDataSource> 

Répondre

1

Vous devriez essayer d'ajouter des colonnes de données à vos tables de données (avec l'ID et le rang étant le nom de la colonne) de sorte que les données peuvent être liées au contrôle.

+0

planifions, pas sûr de ce que vous voulez dire. L'ID et le rang sont des colonnes dans la base de données mais je suppose que ce n'est pas ce que vous voulez dire ... – Risho

1

La propriété Text le définit par valeur.

Voir http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.text.aspx

Vous semblez avoir ce que sera le texte associé à la valeur et que vous souhaitez définir que l'élément sélectionné. Je suppose que c'est principalement parce que votre collection de valeur est liée à quelque chose appelé ID et je suppose qu'un rang de Star n'est pas un ID.

Si Star est ce qui s'affichera dans DataTextField, utilisez la méthode FindByText de la collection d'éléments pour le sélectionner.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemcollection.findbytext.aspx

Exemple

ListItem li = DropDownList1.Items.FindByText("one"); 
    if (li != null) li.Selected = true; 

Si Star est en effet un ID, puis vérifiez que la collecte est complètement chargée avant d'essayer de sélectionner quoi que ce soit en elle.

+0

J'ai déjà essayé cela (rank.selectedItem = mr.rank) avec "... ne peut pas être assigné - lu valeur unique ". Les liens que vous avez suggérés ne signifient pas vraiment trop. Je ne sais pas comment l'associer à ce qui se passe dans le code. – Risho

+0

Je n'ai pas dit de définir SelectedItem. La liste déroulante est-elle remplie? Si c'est le cas, veuillez consulter la source de la page Web et publier le code HTML généré en tant qu'élément de sélection. – Nikki9696

+0

Voici ddl à partir du code HTML: