我上了一堂课,我试着将datgaridview填充为通用列表。我在dapuConfigs.CoveredLanes
中遇到了一个问题,这是一个列表,我试图访问该列表并将其填入datagridview中,但我没有成功。可能这两种方法都错了......!
请帮帮我??
当我运行时,我会在网格单元格中显示一个文本:system colelction generic list。
添加了代码:
.ForEach(
Configs =>
{
{
datagridview1.Rows.Add(
new object[]
{
Configs.Id,
Configs.Description,
Configs.Covered.ElementAtOrDefault(0).Id == null ? "" : Configs.Covered.ElementAtOrDefault(0).Id.ToString(),
Configs.Covered.ElementAtOrDefault(1).Id == null ? "" : Configs.Covered.ElementAtOrDefault(1).Id.ToString(),
Configs.Covered.ElementAtOrDefault(2).Id == null ? "" : Configs.Covered.ElementAtOrDefault(2).Id.ToString(),
Configs.Covered.ElementAtOrDefault(3).Id == null ? "" : Configs.Covered.ElementAtOrDefault(3).Id.ToString(),
}); } });
答案 0 :(得分:2)
所以,你在哪里
dapuConfigs.CoveredLanes.ToList(),
在第一个示例中,请尝试更改为:
dapuConfigs.CoveredLanes.ElementAtOrDefault(0) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(0).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(1) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(1).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(2) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(2).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(3) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(3).ToString(),
或者,用于匹配Id
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
或更多关于id ...
的一般匹配dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
andd添加一张不匹配的支票......
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First (cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
答案 1 :(得分:1)
您必须汇总dapuConfigs.CoveredLanes
中的值才能在字段中显示。例如,如果有字符串值,您可以这样做:
string.Join(",", dapuConfigs.CoveredLanes.ToArray())
生成逗号分隔列表。
或者为了显示前4个项目,您可以像这样创建对象:
new object[]
{
dapuConfigs.Id, //col0
dapuConfigs.Description, //col1
dapuConfigs.CoveredLanes.ElementAt(0), //col2
dapuConfigs.CoveredLanes.ElementAt(1),//col3
dapuConfigs.CoveredLanes.ElementAt(2), //col4
dapuConfigs.CoveredLanes.ElementAt(3),//col5
dapuConfigs.Position.Value, //col6
dapuConfigs.Position.Value,//col7
}
将格式化代码抽象为某种格式化对象是明智的。
更接近这种方法的方法是连接CellFormatting事件并更改单元格格式化数据的方式。这样,您的表示逻辑就不会像我发布的片段那样流入模型。 http://msdn.microsoft.com/en-us/library/2249cf0a.aspx
答案 2 :(得分:1)
你可以这样做
private void BindGrid()
{
List<string> lst = new List<string>();
lst.Add("A");
lst.Add("D1");
lst.Add("A2");
lst.Add("A3");
List<Test> tst = new List<Test>();
Test t = new Test();
t.ListValue = lst;
t.ID = 1;
tst.Add(t);
lst = new MyList();
lst.Add("B");
lst.Add("B1");
lst.Add("A2");
lst.Add("B3");
t = new Test();
t.ListValue = lst;
t.ID = 2;
tst.Add(t);
lst = new MyList();
lst.Add("C");
lst.Add("B1");
lst.Add("C2");
lst.Add("C3");
t = new Test();
t.ListValue = lst;
t.ID = 3;
tst.Add(t);
ArrayList a = new ArrayList();
try
{
var lst2 = (from b in tst
select new
{
b.ID,
col2 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("A")).ToArray()),
col3 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("B")).ToArray()),
col4 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("C")).ToArray())
}).ToList();
GridView1.DataSource = lst2;
GridView1.DataBind();
}
catch (Exception ex)
{
string ss = ex.Message;
}
}
public class Test
{
public int ID { get; set; }
public List<string> ListValue { get; set; }
}