2016-12-22 16 views
1

データテーブルがあり、データテーブルからいくつかの行を選択しようとしています。
PracticeIDs 1 & 37でうまく動作しますが、何らかの理由でデータの最後の行(ID 7)に達したときに、データテーブルからレコードをプルアップしません。DataTable値が返されません。

アイデア?

 //create datatable 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("PracticeID"); 
     dt.Columns.Add("AuthorID"); 

     //add data(in real code, this is pulled from the database) 
     dt.Rows.Add(1, 87); 
     dt.Rows.Add(37, 202); 
     dt.Rows.Add(1, 268); 
     dt.Rows.Add(7, 262); 

     //get distinct practiceids into datatable 
     DataView dv = new DataView(dt); 
     DataTable dtDistinctIDs = dv.ToTable(true, "PracticeID"); 

     //for each practice, get a list of the authors 
     foreach (DataRow practiceRow in dtDistinctIDs.Rows) 
     { 

      DataRow[] dra = dt.Select("PracticeID = " + practiceRow["PracticeID"].ToString()); 
     } 
+2

'...データテーブルからレコードをプルアップしません。例外はありますか?ループは単にそれに達していませんか?あなたのコンピュータはフリーズしましたか?私たちはあなたの画面を見ることができないので、(今の時点で)私たちができることは何が起こったのか、それがなぜ起こったのかを推測します。例外がある場合は、できるだけ多くを含めるようにしてください(メッセージ、タイプ、内部例外)。例外がない場合は、その動作を詳細に記述してください。また、この情報で質問を更新し、コメントを作成しないでください。 – Igor

答えて

1

この動作は直感的ではないように見えます。実験している問題は、データ型を持たない列から導出されます。私は今まさにそれを説明するが、以下にコードを変更しようと予想されるとして、それがうまくいくことはできません。

DataTable dt = new DataTable(); 
dt.Columns.Add("PracticeID",typeof(int)); //THIS IS THE IMPORTANT BIT 
dt.Columns.Add("AuthorID"); 

//add data(in real code, this is pulled from the database) 
dt.Rows.Add(1, 87); 
dt.Rows.Add(37, 202); 
dt.Rows.Add(1, 268); 
dt.Rows.Add(7, 262); 

//get distinct practiceids into datatable 
DataView dv = new DataView(dt); 
DataTable dtDistinctIDs = dv.ToTable(true, "PracticeID"); 

//for each practice, get a list of the authors 
foreach (DataRow practiceRow in dtDistinctIDs.Rows) 
{ 

    DataRow[] dra = dt.Select("PracticeID = " + (int)practiceRow["PracticeID"]); 
} 

EDIT:

は実際に私が間違っていた、それは単純でした。実際の問題は、Selectがフィールドを囲んでいない'を持たないことでした。デフォルトでは、DataColumnは文字列です。したがって、元のコードを使用して、次のコードを変更するだけでうまくいくはずです:

DataRow[] dra = dt.Select("PracticeID = '" + practiceRow["PracticeID"].ToString() + "'"); 
+0

または DataRow [] dra = dt.Select( "PracticeID = '" + practiceRow ["PracticeID"]。ToString()+ "'"); - IDを文字列として扱いたい場合は – jondow

+0

はい@jondow、あなたがコメントしたときに編集していました。ありがとうございます:) – Pikoh

+0

ありがとうございます。それはトリックでした! –

関連する問題