Vraag Waarom krijg ik "System.Data.DataRowView" in plaats van echte waarden in mijn Listbox?


Ik hoop dat iemand kan helpen. Maar telkens als ik mijn code uitvoer en probeer een te bekijken highscore alles wat ik terug krijg in mijn listbox is System.Data.DataRowView.

Kan iemand zien waarom?

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;

10
2018-03-15 09:17


oorsprong


antwoorden:


Ik heb altijd te maken met dit probleem, zelfs als ik de DisplayMember en ValueMembers van de ListBox. Uw huidige code is correct en zou moeten werken, als u toegang moet hebben tot de huidig ​​geselecteerde artikelwaarde van elke kolom van uw dTable je kunt ze dit laten doen:

DataRowView drv = (DataRowView)lstNames.SelectedItem;
String valueOfItem = drv["NameAndScore"].ToString();

Wat ik leuk vind aan het verkrijgen van de volledige DataRowView is dat als je meer kolommen hebt, je nog steeds toegang hebt tot hun waarden en kunt doen wat je nodig hebt.


14
2018-03-15 16:38



Stel je lstNames.DisplayMember en lstNames.ValueMember velden.

Hiermee wordt de eigenschap opgehaald of ingesteld die voor deze ListControl wordt weergegeven.


Hiermee wordt het pad van de eigenschap opgehaald of ingesteld dat moet worden gebruikt als de werkelijke waarde voor   de items in de ListControl.

Dit zou je probleem moeten oplossen ..


5
2018-03-15 09:22



De volgende code zou moeten werken:

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

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

Als dit niet werkt, werkt u uw vraag bij en geeft u ons informatie over de kolommen en waarden die daadwerkelijk worden geretourneerd dSet.Tables[0].


5
2018-03-15 10:13



Zoals ik al zei in de reacties, voeg lstNames.DataBind () toe aan je 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;

BEWERK:

Kun je dit in plaats daarvan proberen:

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();

2
2018-03-15 09:27



Als u wilt dat uw keuzelijst waarden weergeeft uit een specifieke kolom van het gebruik van de gegevensbron lstNames.DataTextField = "SpecialColumnName";


0
2018-04-16 07:13



Ik gebruik :

foreach (DataGridViewRow row in _dataGridView.SelectedRows)
{
    var rowObject = row.DataBoundItem as DataRowView;
    var array = rowObject.Row.ItemArray;
}

0
2017-12-24 15:47



zorg ervoor dat u de naam van het veld intypt, hetzelfde als in de gegevensbron, in andere woorden, het is hoofdlettergevoelig

zo:  Me.GridLookUpEdit1.Properties.DisplayMember = "cur_code" is anders dan  Me.GridLookUpEdit1.Properties.DisplayMember = "CUR_code"


0
2017-10-08 19:46



als je het object hebt gekopieerd in plaats van als een nieuw object te plaatsen, doet het dit. Probeer het object te verwijderen en weer op te zetten. Ik had hetzelfde probleem en dit is wat ik deed. Ik weet niet waarom het werkte, maar het is gelukt.


0
2017-12-01 14:31