将对象引用存储在DataGridView行中

本文关键字:DataGridView 行中 存储 对象引用 | 更新日期: 2023-09-27 18:22:18

我有一个这样的方法:

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;
    }

有没有办法在每一行存储"文档"引用?这样,如果我选择一行,我就可以返回"doc"对象?正在为行或其他不同的内容寻找某种Tag属性替代项。

将对象引用存储在DataGridView行中

如果要在DataGridView中显示对象列表,则不需要使用DataTable。您可以简单地将您的列表设置为DataGridView:的DataSource

public void setResults(Documents[] doc)
{
    gridSearchResults.DataSource = doc;
}

然后,如果您想知道行后面的对象,您可以简单地使用DataGridViewRowDataBoundItem属性,并将其强制转换为您的对象类型:

var documents= (Documents)gridSearchResults.Rows[0].DataBoundItem;

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

  • 如何:访问绑定到Windows窗体DataGridView行的对象

如果您只想在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而不是DataGrid。我想你正试图在回发后获取该对象。

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