Я не думаю, что DataGridView
примет столбец типа string[]
.
Если , то вы можете использовать событие CellFormatting
для создания красиво отформатированной отображаемой версии ваших данных, возможно, так:
private void DataGridView1_CellFormatting(object sender,
DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == yourIndexOrName1 && e.Value != null)
{
var s = e.Value as string[];
e.Value = String.Join(", ", s);
}
}
Но Столбец не создается (при использовании AutoGenerateColumns
) и не заполняется иначе.
Итак, вам следует создать легко форматируемый столбец . Либо в SQL на уровне базы данных, либо в строке Linq .
* +1025 * Пример:
var dt_ = dt.Rows.Cast<DataRow>().Select(x => new {
f1 = x.Field<string>(0),
f2 = x.Field<string[]>(1).Aggregate((i, j) => i + ", " + j),
f3 = x.Field<int>(2)
});
dataGridView1.DataSource = dt_.ToList();
Используя мои тестовые данные:
DataTable dt = new DataTable();
dt.Columns.Add("col1", typeof(string));
dt.Columns.Add("col2", typeof(string[]));
dt.Columns.Add("col3", typeof(int));
var row = dt.NewRow();
row.SetField<string>("col1", "A");
row.SetField<string[]>("col2", new string[] { "abc", "xyz", "123" });
row.SetField<int>("col3", 23 );
dt.Rows.Add(row);
row = dt.NewRow();
row.SetField<string>("col1", "B");
row.SetField<string[]>("col2", new string[] { "a-b-c", "x+y+z", "1:2:3" });
row.SetField<int>("col3", 42);
dt.Rows.Add(row);
Результат выглядит так:
Хотя на самом деле это означает, что вам нужно позаботиться о каждом поле, imo автогенерация столбцов не такая мощная и гибкая, как хотелось бы, когда дело доходит до рабочего кода.