从foreach中的列表中获取项目

时间:2012-10-19 09:15:53

标签: c# xml winforms list datagridview

我上了一堂课,我试着将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(),

});                           }                       });

3 个答案:

答案 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; }
}