2010-12-28 2 views
2

Я следующая проблема: У меня есть список «LST» «лицо» объектов, и я положил их в DataGridView с помощью объекта DataView (мне это нужно для фильтров)DataBoundItem с помощью DataView

 DataTable dt = Request.ListToDataTable(lst); 
     dw = new DataView(dt); 
     dw.Sort = "age ASC"; 
     dataGridView1.DataSource = dw; 

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

 Person val = dataGridView1.SelectedRows[0].DataBoundItem as Person; 
     Debug.WriteLine(val.id); 

но при запуске программы, в результате аварии, вероятно, потому что связанный элемент не является объектом Person, но DataTable элемент. Может кто-нибудь указать мне, как я могу получить этот элемент? Если бы колумб не был скрыт, это было бы легко, но таким образом я не могу понять, как его получить! Благодаря всем

+0

do lst.Sort(); dataGridView1.DataSource = lst; вместо текущего кода. –

+0

Мне нужен DataView, чтобы легко добавлять и удалять фильтры для элементов datagrid. – kaharas

+0

Откуда возникает запрос 'Request.ListToDataTable()'? В любом случае, похоже, что ваши объекты Person преобразуются в DataRows. Вы не можете отбросить назад. –

ответ

4

Вам нужно что-то вроде:

var row = dataGridView1.SelectedRows[0].DataBoundItem as DataRow; 
var val = row[X] as MyType; 

Вторая попытка:

var drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView; 
var row = drv.Row as DataRow; 
var val = row[X] as MyType; 
+0

Когда я нажимаю кнопку, переменная строки имеет значение null, даже если я выбрал строку из datagrid. – kaharas

+0

Является ли DataBoundItem нулевым? См. Править. –

+0

Теперь это работает, спасибо большое. – kaharas

4

То есть becuase, вы связывании DataView к DataGridView поэтому коллекция элемент будет иметь тип DataRowView, чтобы получить его правильно.

DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView ; 

Now get the associated Row 

if(drv != null) 
    { 
    DataRow row = drv.Row; 

    // Now get the respective column value say PersonId and assuming PersonId is a column in the bounded DataView 

    if(row!=null) 
     { 
     var personId = row["PersonId"]; 
     } 
    } 
Смежные вопросы