繁体   English   中英

数据表上的行标题 - 将显示在datagridview中

[英]row headers on a datatable - to be displayed in a datagridview

有没有将行标题信息存储在数据表中,这样当我将它绑定到datagridview时,它会自动显示c#中的列标题和行标题?

Linqpad演示程序

据我所知,您希望将列名作为值添加到datatable / datagridview中。 以下是一个Linqpad -Program,你可以轻松地将贴片复制到Linqpad中来玩。 代码将列名添加到数据表的第一行。 您可以轻松地将此数据表绑定到gridview - 但要注意数据表的每一列必须是string类型。

void Main()
{
    GetDataTable().Dump();
}

public DataTable GetDataTable()
{
    var dt = new DataTable();   
    dt.Columns.Add("Id", typeof(string)); // dt.Columns.Add("Id", typeof(int));
    dt.Columns["Id"].Caption ="my id";  
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Job", typeof(string));
    dt.Rows.Add(GetHeaders(dt));
    dt.Rows.Add(1, "Janeway", "Captain");
    dt.Rows.Add(2, "Seven Of Nine", "nobody knows");
    dt.Rows.Add(3, "Doctor", "Medical Officer");
    return dt;
}

public DataRow GetHeaders(DataTable dt)
{
    DataRow dataRow = dt.NewRow();      
    string[] columnNames = dt.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .ToArray();    
    columnNames.Dump();
    dataRow.ItemArray = columnNames;
    return dataRow;
}

Linqpad程序的结果

使用其他说明和替代代码更新2019-06

GetHeaders方法不是获取标头的最简单选项。 Previoulsy扩展方法Cast<TResult>(IEnumerable)用于DataColumnCollection-Class另一种方法是迭代集合 - 这就是在GetHeadersNew T中做的

public DataRow GetHeadersNew(DataTable dt)
{
    DataRow row = dt.NewRow();      
    DataColumnCollection columns = dt.Columns;
    for (int i = 0 ;i <columns.Count ;i++)
    {
         row[i] = columns[i].ColumnName;
    }       
    return row;
}

这可能更有效,因为涉及更少的对象和方法。

只要您可以使用基于行中数据的代码创建它们,我只需在运行时使用c#添加它们。 向数据表添加一个列,并使用foreach循环遍历它。 只要没有太多行,这段代码就会很快执行:

DataTable dt = new DataTable();
// code here to get your datatable
dt.Columns.Add("rowheader");
foreach (DataRow r in dt.Rows)
{
    r["rowheader"] = "my nice row header";
}

然后输出新列rowheader作为网格中的第一个单元格。

另一种解决方案是使用sql查询返回结果集中的“额外”列。 例如:

Select *, 'my nice row header' as rowheader from myTable

通过这种方式,您可以使SQL完成所有工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM