2012-08-22 140 views
4

我想从两个列表中添加一行到表中。我在第二个foreach循环中出现错误。 无法将Liability.LiabilityCheckpointInstance转换为Liability.LiabilityAssignment。嵌套列表和foreach循环

foreach (LiabilityCheckpointInstance ci in value) 
{ 
    //foreach (LiabilityAssignment la in value) 
    //{ 
    var tr = new TableRow(); 
    var tc = new TableCell { Text = ci.CheckGroup }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.IxCheck.ToString() }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.CheckPointInfo.ToString() }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.RejectedBy }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.Role }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.Mistakes.ToString() }; 
    tr.Cells.Add(tc); 
    //ChkpLiabilityDataTable.Rows.Add(tr); 
    foreach (LiabilityAssignment la in value) 
    { 
     //var tr = new TableRow(); 
     tc = new TableCell { Text = la.LiabileOrganizationName }; 
     tc = new TableCell { Text = la.LiabileOrganizationName }; 
     tr.Cells.Add(tc); 
     tc = new TableCell { Text = la.LiablePersonName }; 
     tr.Cells.Add(tc); 
     tc = new TableCell { Text = la.Comment }; 
     tr.Cells.Add(tc); 
     ChkpLiabilityDataTable.Rows.Add(tr); 
    } 
} 
+1

'LiabilityCheckpointInstance'有'LiabilityAssignment'列表吗? –

+1

对于你的第二个'foreach'循环,你不是指“foreach(cA.XXXX中的LiabilityAssignment la)”吗? –

+3

var的使用使我生病了X( – CSharpened

回答

1

这应该对你有用。

foreach (LiabilityCheckpointInstance ci in value) 
{ 
    var tr = new TableRow(); 
    var tc = new TableCell { Text = ci.CheckGroup }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.IxCheck.ToString() }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.CheckPointInfo.ToString() }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.RejectedBy }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.Role }; 
    tr.Cells.Add(tc); 
    tc = new TableCell { Text = ci.Mistakes.ToString() }; 
    tr.Cells.Add(tc); 

    // YOU NEED TO BUILD THESE UP FRONT SO YOU CAN LOOP THROUGH THE 
    // CHILDREN SAFELY BELOW 
    tr.Cells.Add(new TableCell()); 
    tr.Cells.Add(new TableCell()); 
    tr.Cells.Add(new TableCell()); 

    // I DON'T KNOW IF YOUR PROPERTY IS NAMED LiabilityAssignments OR NOT 
    // SO REPLACE THAT WITH WHAT EVER IS NECESSARY - BUT IT SHOULD BE THE 
    // LIST OF LiabilityAssignment ON THE LiabilityCheckpointInstance OBJECT 
    foreach (LiabilityAssignment la in ci.LiabilityAssignments) 
    { 
     tr.Cells[6].Text = la.LiabileOrganizationName; 
     tr.Cells[7].Text = la.LiablePersonName; 
     tr.Cells[8].Text = la.Comment; 

     ChkpLiabilityDataTable.Rows.Add(tr); 
    } 
} 
4

你的foreach循环是:

foreach (LiabilityCheckpointInstance ci in value) 
foreach (LiabilityAssignment la in value) 

它遍历同样的事情(value),但他说在它的项目是不同的。 [1]

我会从上下文中认为第二个应该循环而不是仅仅是价值的ci.something

所以你会:

foreach (LiabilityAssignment la in ci.Something) 

当然,你需要将Something改变无论你的清单。

[1]我应该注意到,语法本身并不正确。如果价值中的项目是两种类型(例如一个是另一个的子类型),它会正常工作。尽管如此,这看起来并不是这种情况。

+0

我想将两个列表中的数据合并到表中的单个行中。在LiabilityCheckpointInstance类中,我已经声明了责任分配类的列表。 –

+0

@ManojNayak:所以'LiabilityAssignment'的列表将是'ci.Assignments'或类似的东西。我已经在这一点上进行了一些澄清。 – Chris

1

二回路应

foreach (LiabilityAssignment la in ci) 
1

您正在使用的“价值”作为双方的foreach语句的源列表。值显然包含LiabilityCheckpointInstance对象,因此在尝试使用它时就会失败,就像它包含LiabilityAssignment对象一样。

您的意思是sa:foreach(cI。中的LiabilityAssignment la)?