我想将list(ProductList)绑定到DataGridView,但是一列是集合(Categories),但是DataGridView show"(Collection)"而不是List的内容。我无法重写或更改此ProductList类。如何绑定此“类别列表”列?
这是绑定:
dataGridView1.AutoGenerateColumns = false;
dataGridView1.ColumnCount = model.ColumnsNames.Length;
for (int i = 0; i < model.ColumnsNames.Length; i++)
{
string columnName = model.ColumnsNames[i];
dataGridView1.Columns[i].Name = columnName;
dataGridView1.Columns[i].DataPropertyName = columnName;
}
dataGridView1.DataSource = model.Products;
以下是ProductModel,网格的数据源为List<Product>
:
public class Product
{
//...
/// <summary>
/// List of product categories names (string).
/// In write-mode need to pass a array of categories IDs (integer)
/// (uses wp_set_object_terms())
/// </summary>
public List<object> categories { get; set; }
// ...
}
我不想使用子网格,我只想将属性显示为TextBoxColumn中的字符串,如下所示:CollectionElement1,CollectionElement2等。
这不是我的课,实际上只是一个参考。所以我无法在任何地方改变它。
答案 0 :(得分:0)
您可以使用DataGridView
categories
事件来提供void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//Use zero based index of the cell that contains categories
var cell= 3;
if (e.ColumnIndex == cell && e.RowIndex >= 0)
{
var categories = (List<object>)dataGridView1.Rows[e.RowIndex].Cells[cell].Value;
e.Value = string.Join(", ", categories.Select(x => x.ToString()));
}
}
属性的友好代表:
categories
在这种情况下,List of product categories names (string).
包含ToString()
因此选择List<SomeClass>
即可。但对于ToString
的情况,您应该覆盖SomeClass
的{{1}}或选择其中一个属性。
作为另一种选择,您可以使用新的ViewModel
或使用匿名类型来塑造查询结果,但在Product
模型不属于您的当前情况下,它有很多& #39;属性,以前的解决方案是最简单的选择。
答案 1 :(得分:0)
像
这样的东西dataGridView1.DataSource = (from p in model.Products
select string.Join(", ", p.categories.ToArray())).ToList();