将对象引用存储在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
中显示对象列表,则不需要使用DataTable
。您可以简单地将您的列表设置为DataGridView
:的DataSource
public void setResults(Documents[] doc)
{
gridSearchResults.DataSource = doc;
}
然后,如果您想知道行后面的对象,您可以简单地使用DataGridViewRow
的DataBoundItem
属性,并将其强制转换为您的对象类型:
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;