2016-11-11 8 views
0

datagridviewにチェックを入れてチェックボックスの値を取得するのに問題があります。私はチェックボックスをチェックしたすべてのIDを取得したいが、私は最新のチェックのみを取得している。ここでチェックボックスから値を取得するには、DataGridviewでチェックしてください。C#

は私のコードです:

string Id = ""; 

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new ds_utilityTableAdapters.tbl_membersTableAdapter();  
ds_utility.tbl_membersDataTable dtm = new ds_utility.tbl_membersDataTable(); 

foreach (DataGridViewRow row in dgv_members.Rows)  
{   
    if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true) 
    { 
     Id= row.Cells[1].Value.ToString(); 

     // using Id to display data in crystal report viewer 
     // but only read the latest checkbox value 

     dtm = tam.GetDataBy_SearchId(Id); 

     // in my dataset (ds_utility), I wrote the query like this 
     // SELECT * FROM tbl_members WHERE (Id = ?) 
    } 
} 

すべての値を取得するためにクエリを記述するためにどのように?

するds_utility.tbl_membersDataTableのリストを作成し、各反復の後にリストにテーブルを追加:私はあなたを見るものから、

+0

。その場合、各反復後に、現在のIdからのデータが含まれます。当然、最後の反復の後には、最後のIDからのデータのみが含まれます。 – Vax

+0

@vaxltは返信してくれてありがとう..「dtm」を置くべき場所や、すべての価値を得るために正しいクエリを書く方法をもっと説明できますか? – Zeera

答えて

0

は、複数のオプションがあります。これは最も簡単な方法ですが、最初に複数のテーブルを反復処理する必要があるため、今後は問題が発生します。それは次のようになります。

string Id = ""; 

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new ds_utilityTableAdapters.tbl_membersTableAdapter();  List<ds_utility.tbl_membersDataTable> dtm = new List<ds_utility.tbl_membersDataTable>(); 

foreach (DataGridViewRow row in dgv_members.Rows)  {   if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true) { 
    Id= row.Cells[1].Value.ToString(); 

    // using Id to display data in crystal report viewer 
    // but only read the latest checkbox value 

    dtm.Add(tam.GetDataBy_SearchId(Id)); 

    // in my dataset (ds_utility), I wrote the query like this 
    // SELECT * FROM tbl_members WHERE (Id = ?) } } 

しかし、あなたの場合、最良のオプションは、SQLクエリを変更し、代わりに1つのIDを渡すのでは、同上の連結のリストを渡すことであろう。あなたはこのように見えるためにあなたのSQLを変更することによって、これを達成することができます

SELECT * FROM tbl_members WHERE Id in (?) 

と見えるようにコードを変更:

あなたがループの中で「DTM」オブジェクトを上書きしているように見えます
string Id = ""; 

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new ds_utilityTableAdapters.tbl_membersTableAdapter();  
ds_utility.tbl_membersDataTable dtm = new ds_utility.tbl_membersDataTable(); 
List<string> idList = new List<string>(); 

foreach (DataGridViewRow row in dgv_members.Rows)  
{   
    if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true) 
    { 
     Id= row.Cells[1].Value.ToString(); 

     // using Id to display data in crystal report viewer 
     // but only read the latest checkbox value 

    idList.Add(Id); 
    } 
} 

dtm = tam.GetDataBy_SearchId(string.Join(",", idList)); 
+0

私は試しましたが、動作していません – Zeera

関連する問題