4

2 つのリストから 1 つの行をテーブルに追加したいと考えています。2 番目の foreach ループでエラーが発生します。Liability.LiabilityCheckpointInstance を Liability.LiabilityAssignment に変換できません。

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);
    }
}
4

4 に答える 4

4

foreach ループは次のとおりです。

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

同じもの ( value) をループしていますが、その中のアイテムが異なっていると言っています。[1]

コンテキストから、2 番目はci.something単なる値ではなくループする必要があると思います。

したがって、次のようになります。

foreach (LiabilityAssignment la in ci.Something )

もちろんSomething、リストを何にでも変更する必要があります。

[1] 構文自体は間違っていないことに注意してください。値の項目が両方のタイプの場合 (たとえば、一方が他方のサブタイプである場合)、正常に機能します。ただし、ここではそうではないようです。

于 2012-08-22T13:34:54.813 に答える
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);
    }
}
于 2012-08-22T14:04:15.003 に答える
1

2番目のループは

foreach (LiabilityAssignment la in ci)
于 2012-08-22T13:35:53.033 に答える
1

両方の foreach ステートメントのソース リストとして 'value' を使用しています。value には明らかに LiabilityCheckpointInstance オブジェクトが含まれているため、LiabilityAssignment オブジェクトが含まれているかのように使用しようとすると失敗します。

sa: foreach (LiabilityAssignment la in ci.) を意味していましたか?

于 2012-08-22T13:36:37.160 に答える