2013-12-26 1 views
0

У меня есть профиль фильтрованных данных, из которого я должен извлечь значения. Проблема в том, что когда я это делаю, я получаю значения из нефильтрованных данных.Как получить значение из отфильтрованных значений dataview в C#?

dv1.RowFilter = "collegeno=" +i; 
for(int k=1;k<dv1.count;k++) 
{ 
    //inserting data in database; there is column in database table; I am inserting into it; 
dv1.Table.Rows[k]["roomno"]); 

} 

Для бывшего: Общая нет. строк в DataView - 200;
Когда i=1 У меня 30 записей;
Если я поставлю k=4, то я должен получить четвертый ряд из этого 30 записей.
Но я получаю 4-ю строку из 200 записей ..

+0

Пожалуйста, добавьте больше кода! –

+0

Не могли бы вы объяснить больше на 'RowFilter' – saeed

+0

@ user3116746 обновленный код вопроса синтаксически неверен .. –

ответ

3

Код, который вы написали обращается основную таблицу с помощью блока dv1.Table кода.

Вместо этого попробуйте, как это

dv1[k]["roomno"] 

Этот код работает на DataView, на которой фильтр применим.

Если вы используете DataView.Table, тогда он получит доступ к нефильтрованным результатам.

Ссылка Ссылка: MSDN - DataView.RowFilter

2

Если я поставляю к = 4, то я должен получить четвертую строку из этих 30 записей. Но я получаю 4-й ряд из 200 записей.

Это потому, что вы запрашиваете таблицу, а не вид. Вместо этого вы должны сделать это:

dv1.RowFilter = "collegeno=" +i; 
object value = dv1[k]["roomno"]; 

В зависимости от того, что вам нужно, вы можете использовать метод DataTable.Select вместо DataView:

var rows = table.Select("collegeno=" +i); 
object value = rows[k]["roomno"]; 
+0

любезно сообщите мне, какая из них лучше в производительности« Datatable.select »или Dataview ?? – user3116746

+0

@ user3116746, я бы сказал, что DataView немного быстрее, поскольку он не материализует отфильтрованные строки, но это всего лишь предположение; вы должны сделать профилирование, если хотите быть уверенным. В любом случае, если в таблице нет большого количества данных, разница, вероятно, небольшая; используйте тот, который наилучшим образом соответствует вашим потребностям. –

0
DataTable dt = dv.ToTable();  
    for(int k=1;k<dt.Rows.Count;k++) 
    { 
     dt.Rows[k]["roomno"]; 
     //dv1.Table.Rows[k]["roomno"]); 

    } 
+0

синтаксически неправильный код .. Это не скомпилируется .. –

+0

@HarshBaid Извините, я действительно прокомментировал неправильный код. –

+0

Собственно, это все еще недействительно, потому что доступ индексатора не является выражением, но код OP недействителен ... –

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