2016-11-11 10 views
0

У меня есть проблема с установкой значения из флажка в datagridview. Я хочу получить все идентификаторы, в которых установлен флажок, но я получил только последнюю версию.Получение значения из флажка отмечено в 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 = ?) 
    } 
} 

Как написать запрос, чтобы получить все значения?

+0

Похоже, вы перезапись «ДТМ» объект в цикле. Поэтому в этом случае после каждой итерации он будет содержать данные из текущего идентификатора. Естественно, что после последней итерации он будет содержать данные только из последнего идентификатора. – Vax

+0

@vaxlt спасибо за ответ. Не могли бы вы объяснить, где я должен положить «dtm» или как написать правильный запрос, чтобы получить все значение? – Zeera

ответ

0

Из того, что я вижу, у вас есть несколько вариантов:

Создать список ds_utility.tbl_membersDataTable и добавить таблицу в список после каждой итерации. Это самый простой способ, но это вызовет проблемы в будущем, потому что сначала вам придется перебирать несколько таблиц. Это будет выглядеть следующим образом:

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 и вместо передачи одного Id, передать в каскадном списке идентификаторов. Вы можете добиться этого путем изменения SQL, чтобы выглядеть следующим образом:

SELECT * FROM tbl_members WHERE Id in (?) 

И изменить код, чтобы выглядеть следующим образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^