如何将DataTable与复杂数据对象绑定到GridView?

时间:2011-01-31 22:11:04

标签: c# asp.net data-binding gridview datatable

我的数据表以编程方式生成,并在单元格中包含JobInstance类型的对象。

DataTable dataTable = new DataTable();

// first column - label
dataTable.Columns.Add("JobType", typeof(string));

// other columns (data-driven)
foreach(string config in Configurations)
{
    DataColumn col = new DataColumn(config, typeof(JobInstance)); // !!!
    dataTable.Columns.Add(col);
}

// rows
foreach(string jobType in JobTypes)
{
    DataRow row = dataTable.NewRow();
    row["JobType"] = jobType;

    foreach(string config in Configurations)
    {
        row[config] = GetJobInstance(jobType, config); // returns a JobInstance object
    }

    dataTable.Rows.Add(row);    
}

// first column - label dataTable.Columns.Add("JobType", typeof(string)); // other columns (data-driven) foreach(string config in Configurations) { DataColumn col = new DataColumn(config, typeof(JobInstance)); // !!! dataTable.Columns.Add(col); } // rows foreach(string jobType in JobTypes) { DataRow row = dataTable.NewRow(); row["JobType"] = jobType; foreach(string config in Configurations) { row[config] = GetJobInstance(jobType, config); // returns a JobInstance object } dataTable.Rows.Add(row); }

当我将此DataTable绑定到ASP GridView时,它只显示第一列。但是如果在创建列(带有// !!!的行)时删除“typeof(Job)”,则GridView会通过在单元格中显示JobInstance.ToString()的结果来显示所有列。但是,我无法访问基础JobInstance对象,只能访问正在显示的字符串值。

我在显示GridView时需要访问JobInstance对象(例如在OnRowDataBound中),因为我想访问每个单元格的JobInstance内的字段以确定格式选项,并在每个单元格中添加其他链接。

这可能吗?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

为您的JobInstance定义一个新类并将字段放入其中,为了清楚起见,请将其放在单独的文件中。

在您的aspx代码隐藏中,定义一个List<JobInstance>集合,然后将其填入JobInstance的实例中,然后将此列表分配给您的`GridView'的DataSource。< / p>

为了能够访问List<JobInstance>的实例,请将列表作为aspx页面类中的字段成员。

希望有所帮助,如果您需要任何帮助,请告诉我。