Linqpad Демонстрационная программа
Насколько я понял, вы хотели бы добавить имя столбца в качестве значений в datatable / datagridview. Ниже приведена Linqpad -программа, которую вы можете легко скопировать вставить в Linqpad для воспроизведения. Код добавляет имена столбцов в первую строку в таблицу данных. Вы можете легко связать этот набор данных с видом сетки, но имейте в виду, что каждый столбец таблицы данных должен иметь тип 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;
}
Обновление 2019-06 с дополнительным пояснением и альтернативным кодом
Метод GetHeaders
- не самый простой способ получить заголовки.
Ранее метод расширения 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;
}
Это, вероятно, более эффективно, потому что задействовано меньше объектов и методов.