2014-12-16 2 views
0

Я использую gridview devexpress. После того, как я использую фильтр для этого компонента, есть ошибка nullreference. Если я не использую фильтр. В моем коде отсутствует ошибка.getdatasourcerowindex noreference после фильтра с использованием gridview (Devexpress Winform)?

 for (int i = 0; i < GridView1.RowCount; i++) 
     { 
      DataRow dr; 
      dr = GridView1.GetDataRow(GridView1.GetDataSourceRowIndex(i)); 
      MessageBox.Show(dr[0].ToString()); 

     } 

Это мой код. Любое решение получить значение datarow из gridview после фильтра?

+0

Какой тип фильтра вы используете? Вы фильтруете свой DataRow или gridview? Используете ли вы фильтр rowfilter или какой фильтр? – Sebi

+0

@Sebi На gridview. В компоненте gridview на devexpres есть ShowautofilterRow, я использую это. – AKCode

ответ

0

Возможно, проблема в том, что вы используете RowCount. DataSourceRowIndex основан на индексе, который хранит ваш базовый источник данных. Это не то же самое. Если вы группируете или сортируете, строка handview gridview меняется. И RowCount показывает только, сколько строк находится в GridView. Но это не должно быть эквивалентно вашему datasourceindex.

попробовать следующее, чтобы получить DataRow:

1.

foreach (DataRow row in ((DataTable)GridControl1.DataSource).Rows) 
{ 
    //Here you can access your row via row variable 
} 

Вы должны знать, что RowCount Property наклоняет использовать для обращения к строкам безопасно!

Если вам нужна дополнительная помощь, не стесняйтесь спрашивать.

+0

На gridview. В компоненте gridview на devexpres есть ShowautofilterRow, я использую это. если я использую фильтр для этого компонента, данные по gridview всегда равны нулю, если я использую функцию getdatasourcerowindex. – AKCode

+0

Да, конечно. Вы не можете получить доступ к GridView.RowCount и попытаться получить доступ к DataSource с этим индексом. Если вы используете ShowAutoFilterRow = true, gridview покажет фильтр в верхней части gridview. Этот autofilterrow будет проиндексирован GridView.RowCount. Но в вашем источнике данных не будет ни одной строки этого индекса. У вас нет фильтра в вашем источнике данных. Работает ли мой пример? Еще одно сообщение о том, как вы создаете сетку, пожалуйста. – Sebi

+0

@Sabi Спасибо за вашу заботу, но у меня есть мой код. Это мое решение. 'DataRowView dr = (DataRowView) GridView1.GetRow (GridView1.GetVisibleRowHandle (i)); MessageBox.Show (dr [0] .ToString()); ' – AKCode

0

Вы должны использовать BaseView.DataRowCount свойство вместо BaseView.RowCount собственности:

for (int i = 0; i < GridView1.DataRowCount; i++) 
{ 
    DataRow dr; 
    dr = GridView1.GetDataRow(GridView1.GetDataSourceRowIndex(i)); 
    MessageBox.Show(dr[i].ToString()); 
} 
Смежные вопросы