2013-06-07 3 views
2

Я пытаюсь выполнить функцию поиска для dataTable. Моя проблема в том, что первая строка таблицы ВСЕГДА находится в отфильтрованных строках, даже если логический столбец фактически изменен на нуль. Вот мой код поиска:dataTable.DefaultView.Rowfilter всегда возвращает первую строку

private void buscar() 
    { 
     DataTable dataTable; 
     if (!verTodos) 
     { 
      dataTable = DBHelper.Instance.ProductosConStock(); 
     } 
     else 
     { 
      dataTable = DBHelper.Instance.ProductosTodos(); 
     } 
     dataGridProductos.DataSource = dataTable.DefaultView; 
     foreach (DataGridViewRow row in dataGridProductos.Rows) 
     { 
      if (row.Cells[0].Value.ToString().ToUpper().Contains(txtBusqueda.Text.ToString().ToUpper()) || 
       row.Cells[1].Value.ToString().ToUpper().Contains(txtBusqueda.Text.ToString().ToUpper()) || 
       row.Cells[2].Value.ToString().ToUpper().Contains(txtBusqueda.Text.ToString().ToUpper())) 
      { 
       row.Cells[4].Value = 1; 
      } 
      else 
      { 
       row.Cells[4].Value = 0; 
      } 
     } 
     dataTable.DefaultView.RowFilter = "mostrar = 1"; 
    } 
+0

Странно. Это не должно. Вы уверены, что первая строка на самом деле установлена ​​в 0? – CathalMF

+0

100%, я сделал столбец видимым для проверки. –

ответ

7

Попробуйте создать DataView из вашей DataTable и запустить фильтр, основанный на этом. Ниже приведен быстрый пример, который я попробовал, и он отлично работает.

 DataTable dt = new DataTable(); 

     dt.Columns.Add("bool", typeof(Boolean)); 

     dt.Rows.Add(true); 
     dt.Rows.Add(false); 
     dt.Rows.Add(true); 

     DataView dv = new DataView(dt); 

     dv.RowFilter = "bool = 1"; 

     foreach (DataRowView drv in dv) 
     { 
      Console.WriteLine(drv[0].ToString()); 
     } 
+0

Я нахожусь прямо сейчас. Будет редактировать. Редактировать: Работает как очарование! Большое спасибо. (Не могу проголосовать, так как я новичок здесь, но я сделаю, когда это возможно) –

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