在DataGridView行中存储对象引用?

时间:2015-11-18 11:01:52

标签: c# winforms datagridview

我有一个方法:

public void setResults(Documents[] doc)
{

    //I call a method to set the columns 
    setColumns(doc[0].getColumnsToDisplay())

    //Here i populate the DataGrid

   foreach (Documents element in doc)
   {
                     /dt is a datatable
        DataRow dr = dt.NewRow();

        foreach (string col in results[0].getColumnsToDisplay())
        {
          object val;
          (element.getAttributes() as IDictionary<string, object>).TryGetValue(col, out val);
           dr[col] = val.ToString();    
        }
                    dt.Rows.Add(dr);

    }
       gridSearchResults.DataSource = dt;

    }

有没有办法存储&#34; doc&#34;每行参考?所以,如果我选择一行,我可以返回&#34; doc&#34;对象?寻找某种Tag属性替代行或不同的东西。

2 个答案:

答案 0 :(得分:1)

您应该使用DataGridView而不是DataGrid。我假设你试图在回发后获得该对象。

//DO NECESSARY NULL CHECKS!!!
DataRow row = (gridSearchResults.SelectedRows[0].DataBoundItem as  DataRowView).Row;
Documents selected = (Documents)row;

答案 1 :(得分:1)

如果要在DataGridView中显示对象列表,则无需使用DataTable。您只需将列表设置为DataSource的<{1}}:

即可
DataGridView

然后,如果你想知道行后面的对象,你可以简单地使用public void setResults(Documents[] doc) { gridSearchResults.DataSource = doc; } 的{​​{3}}属性并将其转换为你的对象类型:

DataGridViewRow

有关更多信息和样本,您可以看到:

如果您只想在var documents= (Documents)gridSearchResults.Rows[0].DataBoundItem; 中显示某些列,请按以下方式添加所需的列:

DataGridView