12
votes

Pourquoi obtenir "system.data.datawview" au lieu de valeurs réelles dans ma liste de liste?

J'espère que quelqu'un peut aider. Mais chaque fois que j'exécute mon code et essayez de voir un highscore Tout ce que je reçois dans ma liste de liste est system.data.datawview .

Quelqu'un peut-il voir pourquoi?

code: xxx


0 commentaires

12 Réponses :


5
votes

Définissez votre lstnames.displaymember et lstnames.valuember champs.

Obtient ou définit la propriété pour afficher cette listeControl.


Obtient ou définit le chemin de la propriété à utiliser comme valeur réelle pour les éléments de la liste de liste.

Cela devrait résoudre votre problème ..


5 commentaires

'System.windows.forms.listbox'Listbox' ne contient pas de définition pour "DaTatextfield" et aucune méthode d'extension 'DaTatTextfield' Accepter un premier argument de type 'System.Windows.Forms.Forms.Listbox' pourrait être trouvé (manquez-vous une directive à l'aide de la directive ou une référence d'assemblage?) C'est l'erreur que je reçois lorsque je fixe les deux


@CainNeal votre lstnames est listbox ou non?


Cela me donne juste le système.data.datawview comme je l'ai initialement, je viens de me demander sombre mais puis-je utiliser une étiquette au lieu d'une liste de liste?


@Cainneal bien , je ne suis pas sûr de votre "Comment utiliser Adapter" ou "Quel contrôle dois-je utiliser" questions mais je suis Bien sûr, si vous souhaitez obtenir des valeurs réelles de votre liste de liste, vous devez définir displaymember et ValuMember Propriétés.


J'ai mis à la fois des propriétés d'affichage et d'immatriculation, mais cela m'a donné la même entrée à ma liste de liste.



2
votes

Comme je l'ai dit dans les commentaires, veuillez ajouter lstnames.databind () à votre code. XXX PRE>

EDIT: P>

Pouvez-vous essayer cela: P >

MySqlConnection myConn = new MySqlConnection(connStr);

    string sqlStr = "SELECT CONCAT(Name, ' ', Score) as NameAndScore " + 
                    "FROM highscore ORDER BY Score DESC";

  myConn .Open();

  SqlCommand cmd = new SqlCommand(sqlStr, SQLConnection1);


      SqlDataReader rd = cmd.ExecuteReader();
      while (rd.Read())
      {
        lstNames.Items.Add(rd[0]);
      }
      rd.Close();
      rd.Dispose();
      myConn.Close();


5 commentaires

Il ne me permettra pas d'utiliser .Databind. Il dit que LstNames ne contient pas de définition, mais cela me permettra d'utiliser .Databindings


On dirait que vous utilisez une liste ListControl Pas une liste de liste, alors pouvez-vous simplement ajouter l'obéissance (voir modifier) ​​et supprimer la base de données?


Je ne reçois toujours que 'system.data.datawview' pourrais-je utiliser le code ci-dessus si j'ai utilisé une étiquette au lieu d'une liste de liste? mais évoluer évidemment les noms de notes


Oubliez le Databindind . Cela n'existe pas dans Winforms et il n'est pas nécessaire, car il est évident que la liaison des données se produit déjà - sinon vous ne verriez aucun élément de votre liste.


Pour le code ci-dessus, je reçois un retour dans la liste des octets de la liste [] "



6
votes

Le code suivant doit fonctionner:

DataSet dSet = new DataSet();
dAdapter.Fill(dSet);

lstNames.DisplayMember = "NameAndScore";
lstNames.ValueMember = "NameAndScore";
lstNames.DataSource = dSet.Tables[0];


4 commentaires

Pas tout à fait sûr comment trouver la valeur de retour pour dset.tables [0] mais quand j'ai testé, j'ai toujours "sytem.data.datawview" dans la liste


Avez-vous déjà débogué? Définissez un point d'arrêt sur le lstnames.displaymember = ... ligne, cliquez avec le bouton droit de la souris sur le mot dadapter et puis inspectez-le rapidement. Dans cette fenêtre, vous pouvez également entrer une valeur comme dadapter.tables [0] [0] pour voir les propriétés de la première ligne.


J'ai défini le point d'arrêt mais je ne trouve pas une option pour inspecter dadpter quand j'ai clic droit?


On peut appeler "montre rapide"



20
votes

Je dois toujours faire face à ce problème, même si je définis le displaymember et de la zone de liste.

Votre code actuel est correct et devrait fonctionner , Si vous avez besoin d'accéder à la valeur d'élément sélectionnée actuelle de toute colonne de votre dTable Vous pouvez les faire faire cela: xxx

Qu'est-ce que j'aime Obtenir l'ensemble du DataRowView est que si vous avez plus de colonnes, vous pouvez toujours accéder à leurs valeurs et faire tout ce dont vous avez besoin avec eux.


0 commentaires

0
votes

Si vous souhaitez que votre boîte de liste affiche les valeurs à partir d'une colonne spécifique de la source de données. lstnames.datatextfield = "SpecialColumnName";


0 commentaires

0
votes

J'utilise: xxx


0 commentaires

0
votes

Assurez-vous simplement que vous tapez le nom de champ identique à celui de DataSource dans un autre mot, il est une casse sensible à la casse

Alors: Me.gridlookupedit1.properties.displaymember = " cur_code " est différent de Me.gridlookupeditt1.properties.displaymember = " cur_code "


0 commentaires

0
votes

Si vous avez copié l'objet au lieu de passer comme un nouvel objet, cela fera cela. Essayez de supprimer l'objet et de la remettre. J'ai eu le même problème et c'est ce que j'ai fait. Je ne sais pas pourquoi ça a fonctionné, mais ça l'a fait.


0 commentaires

1
votes

Seul l'ordre des appels est faux. Premier régler le code> DataSource Code> et uniquement après cela, définissez l'élément d'affichage:

lstNames.DataSource = dTable;
lstNames.DisplayMember = "NameAndScore";


0 commentaires

0
votes

J'ai eu le problème similaire de la sélection d'une valeur unique dans une liste populée et d'obtenir system.data.datawview code>. J'ai été capable de le résoudre en casnant l'élément sélectionné à system.data.datawview code>, puis Accès à la ligne et aux sous-classes de la ligne et de l'élément:

var si = ListBox1.SelectedItem; 
string val = ((System.Data.DataRowView)si).Row.ItemArray[0].ToString();


0 commentaires

-1
votes

Parfois, ce qui pourrait causer le nom de la variable d'affichage d'affichage mal orthographié.


1 commentaires

Pas une réponse. Veuillez utiliser des commentaires pour de telles remarques ou envisagez de la convertir en une réponse élaborée.



1
votes

Je connais sa vieille question. Je pensais que cela pourrait être agréable d'ajouter une mise à jour aux réponses données déjà. Je cherchais une solution au même problème. I Le réalisé qu'il est dans quel ordre vous placez ces 3 lignes de code

lstNames.DataSource = dTable;
lstNames.ValueMember = "NameAndScore";
lstNames.DisplayMember = "NameAndScore";


0 commentaires