0

の名前だけを表示したいdatagridview。これは私のクエリですが、何も返されません:

sc.Open();
cmd.CommandText = "select * from myEmployees where JobRole ='Waiter'";
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
   while (dr.Read())
   {                            
        dgNames.DataSource = dr["firstName"];
        count++                      
   }         
}            
sc.Close();
4

2 に答える 2

1

Datasource を 1 つのプロパティだけに設定することはできません。代わりにできることは、最初の名前の列にバインドされたグリッドビューで列を定義し、グリッドのデータソースを返されるオブジェクトのコレクション全体に設定することです。

次に、Datareader をグリッドにバインドするだけで、while ループを実行する必要がまったくありません。

アップデート

dgNames.AutogenerateColumns=false;
dgNames.Columns.Add("firstName","firstName");
dgNames.DataSource=dr;

返されたレコードの数を知りたい場合は、バインド後にグリッド内の行数を数えるだけです... または、Datareader を使用してデータテーブルをロードし、Datareader をバインドする代わりに Dataable をグリッドにバインドします。DataTables.Rows.Count は、返されたレコードの数を示します。

于 2013-03-08T19:02:37.863 に答える
0

これはMSDNから直接引用したものです(google'datagridview'で、一番上にあります)。一番下までスクロールすると、求めていることを実行する方法を示すサンプルコードがあります。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx

Icarusが言うように、データを行ごとに調べなくても、データをバインドすることができます。しかし、行ごとに行きたい場合は、

...
dgNames.Rows.Add(dr["firstName"]);
...

また、使用しているようにwhileループにあるデータリーダーをインクリメントする必要はありません。

于 2013-03-08T19:12:36.990 に答える