J'espère que quelqu'un peut aider. Mais chaque fois que je lance mon code et que j'essaie d'afficher une highscore
, tout ce que je reçois dans ma liste de sélection est System.Data.DataRowView
.
Quelqu'un peut-il voir pourquoi?
Code:
MySqlConnection myConn = new MySqlConnection(connStr);
string sqlStr = "SELECT CONCAT(Name, ' ', Score) as NameAndScore " +
"FROM highscore ORDER BY Score DESC";
MySqlDataAdapter dAdapter = new MySqlDataAdapter(sqlStr, myConn);
DataTable dTable = new DataTable();
dAdapter.Fill(dTable);
dAdapter.Dispose();
lstNames.DisplayMember = "NameAndScore";
lstNames.DataSource = dTable;
Je dois toujours faire face à ce problème, même si je définit les paramètres DisplayMember et ValueMembers de ListBox . Votre code actuel est correct et devrait fonctionner si vous avez besoin d'accéder à la valeur de l'élément sélectionné actuellement dans n'importe quelle colonne de votre dTable
peut les amener à faire ceci:
DataRowView drv = (DataRowView)lstNames.SelectedItem;
String valueOfItem = drv["NameAndScore"].ToString();
Ce qui me plaît dans l’obtention de la totalité de DataRowView, c’est que si vous avez plus de colonnes, vous pouvez toujours accéder à leurs valeurs et en faire tout ce dont vous avez besoin.
Le code suivant devrait fonctionner:
DataSet dSet = new DataSet();
dAdapter.Fill(dSet);
lstNames.DisplayMember = "NameAndScore";
lstNames.ValueMember = "NameAndScore";
lstNames.DataSource = dSet.Tables[0];
Si cela ne fonctionne pas, veuillez mettre à jour votre question et nous fournir des informations sur les colonnes et les valeurs renvoyées dans dSet.Tables[0]
.
Définissez vos champs lstNames.DisplayMember
et lstNames.ValueMember
.
Obtient ou définit la propriété à afficher pour ce ListControl.
Obtient ou définit le chemin d'accès de la propriété à utiliser comme valeur réelle pour les éléments du ListControl.
Cela devrait résoudre votre problème..
Comme je l'ai dit dans les commentaires, veuillez ajouter lstNames.DataBind () à votre code.
MySqlConnection myConn = new MySqlConnection(connStr);
string sqlStr = "SELECT CONCAT(Name, ' ', Score) as NameAndScore " +
"FROM highscore ORDER BY Score DESC";
MySqlDataAdapter dAdapter = new MySqlDataAdapter(sqlStr, myConn);
DataTable dTable = new DataTable();
dAdapter.Fill(dTable);
dAdapter.Dispose();
lstNames.DisplayMember = "NameAndScore";
lstNames.ValueMember = "NameAndScore";
lstNames.DataSource = dTable;
MODIFIER:
Pouvez-vous essayer ceci à la place:
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();
J'utilise :
foreach (DataGridViewRow row in _dataGridView.SelectedRows)
{
var rowObject = row.DataBoundItem as DataRowView;
var array = rowObject.Row.ItemArray;
}
si vous copiez l'objet au lieu de le placer en tant que nouvel objet, vous obtiendrez cette opération. Essayez de supprimer l'objet et de le remettre. J'ai eu le même problème et c'est ce que j'ai fait. Je ne sais pas pourquoi cela a fonctionné, mais ça a fonctionné.
assurez-vous simplement que vous saisissez le nom du champ comme dans Source de données dans Word, la casse est respectée
alors : Me.GridLookUpEdit1.Properties.DisplayMember = " cur_code " Est différent de. Me.GridLookUpEdit1.Properties.DisplayMember = " CUR_code "
Si vous souhaitez que votre zone de liste affiche les valeurs d'une colonne spécifique de la source de données, utilisez LstNames.DataTextField = "SpecialColumnName";