C# 是否在DataGridView行中存储对象引用?

C# 是否在DataGridView行中存储对象引用?,c#,winforms,datagridview,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

我有这样一种方法:

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;

    }
public void setResults(文档[]文档)
{
//我调用一个方法来设置列
setColumns(文档[0]。getColumnsToDisplay())
//在这里,我填充数据网格
foreach(文档中的文档元素)
{
/dt是一个数据表
DataRow dr=dt.NewRow();
foreach(结果[0]中的字符串列)。getColumnsToDisplay()
{
对象val;
(element.getAttributes()作为IDictionary).TryGetValue(col,out val);
dr[col]=val.ToString();
}
dt.Rows.Add(dr);
}
gridSearchResults.DataSource=dt;
}

是否有办法在每行存储“文档”引用?这样,如果我选择一行,我就可以返回“doc”对象了?正在为行或其他内容寻找某种类型的
标记
属性替代。

您应该使用DataGridView而不是DataGrid。我想你是想在回邮后得到这个东西

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

当您想在
DataGridView
中显示对象列表时,不需要使用
DataTable
。您只需将列表设置为
DataGridView
DataSource

public void setResults(Documents[] doc)
{
    gridSearchResults.DataSource = doc;
}
然后,如果您想知道行后面的对象,只需使用
DataGridViewRow
的属性并将其强制转换为您的对象类型:

var documents= (Documents)gridSearchResults.Rows[0].DataBoundItem;
有关更多信息和示例,请参见:

如果只想在
DataGridView
中显示某些列,请通过以下方式添加所需的列:

this.dataGridView1.Columns.Clear();
this.dataGridView1.AutoGenerateColumns = false;

//Create Column
var column1 = new DataGridViewTextBoxColumn()
{
    Name = "firstNameColumn",        /*Name of Column*/
    HeaderText = "First Name",       /*Title of Column*/
    DataPropertyName = "FirstName"   /*Name of the property to bind to cilumn*/
};

//Add column to grid
this.dataGridView1.Columns.Add(column1);

是datagridview,很抱歉误传了。我尝试了那个方法,但并没有成功。这是因为文档对象是一种复杂类型:某些必填属性在表中不可见。您应该将文档对象添加为datarow,而不是其值。dr[col]=元素;//其中元素是文档对象。选中此链接:如果将数组设置为
DataGridView
DataSource
,则可以使用
DataGridViewRow
DataBoundItem
属性访问每行的底层对象。这就是你所需要的吗?我已经为这个问题提供了一个答案,应该有一个被接受的答案,以便对未来的读者更有用。让我知道你对答案的想法:)谢谢你的回答,Reza,很抱歉不情愿的回答,因为我发现了一种不同的方法,使用Listview和combobox,效果很好。我的计划只是将结果显示在一张表上,让用户选择一个。再次感谢您,它将帮助未来的求职者。欢迎您,并感谢您的友好反馈:)我个人尽量避免使用基于
ListView
的解决方案,并尽可能使用
DataGridView
,因为它支持
数据绑定
,而且非常可定制。