0

我有一门课,我正在尝试将 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(),

}); } });

4

3 回答 3

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(),

并添加检查不匹配...

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() : "",
于 2012-10-19T09:47:30.687 回答
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

于 2012-10-19T09:27:08.590 回答
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; }
}
于 2012-10-19T10:40:35.073 回答