как получить значение из отфильтрованных значений представления данных в С#?

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

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 записей. .


person user3116746    schedule 26.12.2013    source источник
comment
Пожалуйста, добавьте больше кода!   -  person Suraj Singh    schedule 26.12.2013
comment
Не могли бы вы подробнее объяснить RowFilter   -  person saeed    schedule 26.12.2013
comment
@ user3116746 обновленный код вопроса синтаксически неверен ..   -  person Harsh Baid    schedule 26.12.2013


Ответы (3)


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

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

dv1[k]["roomno"]

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

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

Справочная ссылка: MSDN — DataView.RowFilter

person Harsh Baid    schedule 26.12.2013

Если я укажу k=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"];
person Thomas Levesque    schedule 26.12.2013
comment
пожалуйста, дайте мне знать, какой из них лучше по производительности Datatable.select или Dataview ?? - person user3116746; 26.12.2013
comment
@ user3116746, я бы сказал, что DataView немного быстрее, поскольку он не материализует отфильтрованные строки, но это всего лишь предположение; вы должны сделать некоторое профилирование, если хотите быть уверенным. В любом случае, если у вас нет большого количества данных в таблице, разница, вероятно, невелика; используйте тот, который лучше всего соответствует вашим потребностям. - person Thomas Levesque; 26.12.2013

person    schedule
comment
На самом деле, это все еще недействительно, потому что доступ к индексатору не является оператором, но код OP также недействителен... - person Thomas Levesque; 26.12.2013