12

誰かが助けてくれることを願っています。しかし、コードを実行して を表示しようとするとhighscore、リストボックスに返されるのはSystem.Data.DataRowView.

誰でも理由がわかりますか?

コード:

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;
4

12 に答える 12

21

リスト ボックスのDisplayMemberとを設定したとしても、常にこの問題に対処する必要があります。ValueMembers

現在のコードは正しく、動作するはずです。任意の列の現在選択されているアイテムの値にアクセスする必要がある場合は、次のdTableようにして取得できます。

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

全体を取得することについて私が気に入っているのDataRowViewは、より多くの列がある場合でも、それらの値にアクセスして、必要なことを何でもできることです。

于 2013-03-15T16:38:11.553 に答える
6

次のコードが機能するはずです。

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

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

うまくいかない場合は、質問を更新して、 で実際に返される列と値に関する情報を提供してくださいdSet.Tables[0]

于 2013-03-15T10:13:31.143 に答える
5

lstNames.DisplayMemberフィールドとフィールドを設定しますlstNames.ValueMember

この ListControl に表示するプロパティを取得または設定します。


ListControl 内の項目の実際の値として使用するプロパティのパスを取得または設定します。

これで問題が解決するはずです..

于 2013-03-15T09:22:10.940 に答える
2

コメントで述べたように、コードに lstNames.DataBind() を追加してください。

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;

編集:

代わりにこれを試すことができますか:

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();
于 2013-03-15T09:27:31.173 に答える
0

リスト ボックスにデータ ソースの特定の列の値を表示する場合は、lstNames.DataTextField = "SpecialColumnName"; を使用します。

于 2014-04-16T07:13:07.953 に答える
0

新しいオブジェクトとして配置する代わりにオブジェクトをコピーした場合、これが行われます。オブジェクトを削除して、元に戻してみてください。私は同じ問題を抱えていましたが、これが私がしたことです。なぜそれが機能したのかはわかりませんが、機能しました。

于 2017-12-01T14:31:38.963 に答える
0

データソースと同じフィールド名を入力していることを確認してください。つまり、大文字と小文字が区別されます。

だから:Me.GridLookUpEdit1.Properties.DisplayMember = " cur_code "はMe.GridLookUpEdit1.Properties.DisplayMember = " CUR_code "とは異なります

于 2017-10-08T19:46:54.650 に答える
-1

場合によっては、displaymember 変数名のスペルミスが原因である可能性があります。

于 2020-02-15T11:27:50.267 に答える