如何缩短此表?

时间:2014-09-23 07:53:35

标签: c# asp.net row cell

我想我在这里做的事情非常糟糕。我有一个名为oCultivationPlan的导入对象。它显然包含数据。我想创建一个显示其中数据的表。但是我只希望从该对象中选择少数而不是其中的所有数据。有没有办法缩短它?我想过使用foreach或for,但是会循环遍历对象内的所有数据:/而我只想要一些选定的数据。

            TableRow tblRow = new TableRow();

            TableCell tblc = new TableCell();
            tblc.Controls.Add(new LiteralControl("ID"));
            TableCell tblc2 = new TableCell();
            tblc2.Controls.Add(new LiteralControl(import.oCultivationPlan.iID.ToString()));

            tblRow.Controls.Add(tblc);
            tblRow.Controls.Add(tblc2);

            tblImportPreview.Controls.Add(tblRow);

            TableCell tblc3 = new TableCell();
            TableCell tblc4 = new TableCell();
            tblc3.Controls.Add(new LiteralControl("Description"));
            tblc4.Controls.Add(new LiteralControl(import.oCultivationPlan.sDescription.ToString()));

            TableRow tblRow2 = new TableRow();
            tblRow2.Controls.Add(tblc3);
            tblRow2.Controls.Add(tblc4);

            tblImportPreview.Controls.Add(tblRow2);

            TableCell tblc5 = new TableCell();
            TableCell tblc6 = new TableCell();
            tblc5.Controls.Add(new LiteralControl("DateCreated"));
            tblc6.Controls.Add(new LiteralControl(import.oCultivationPlan.dDateCreated.ToString()));

            TableRow tblRow3 = new TableRow();
            tblRow3.Controls.Add(tblc5);
            tblRow3.Controls.Add(tblc6);

            tblImportPreview.Controls.Add(tblRow3);

2 个答案:

答案 0 :(得分:0)

不是foreach :)但你可以使用for循环来获得它。你应该能够使用下面的代码作为你的问题的解决方案:) 它的循环较小,但它与你所做的完全相同。我使用字符串数组来保存你想要进入表格的所有信息,以便它可以在之后发布。 对于每一行,你有2个新单元格,这就是为什么我们有行* 2所以单元格可以填满:)

希望它对您有用,并且您可以使用该解决方案:)

        int _row = 1;
        int _cell = 0;
        string[] arr = new string[6] { "ID", import.oCultivationPlan.iID.ToString(), "Description", import.oCultivationPlan.sDescription.ToString(), "DateCreated", import.oCultivationPlan.dDateCreated.ToString() };
        for (; _row <= 3; _row++)
        {
            TableRow tblRow = new TableRow();
            for (; _cell < _row * 2; _cell++)
            {
                TableCell tblc = new TableCell();
                tblc.Controls.Add(new LiteralControl(arr[_cell]));
                tblRow.Controls.Add(tblc);
            }

            tblImportPreview.Controls.Add(tblRow);
        }

答案 1 :(得分:0)

我会创建一个强类型的类

public Class ImportDto
{
    public string RowIdentifier {get; set;}
    public string RowValue {get; set;
}

然后正如David所说,编写一个过滤函数来过滤Import类中的数据并将其映射到ImportValues

public List<ImportDto> FilterImportedData(Import import)
{
    var importDto = new List<ImportDto>
    {
       new ImportDto { RowIdentifier ="ID", RowValue = import.oCultivationPlan.iID.ToString()},
       new ImportDto { RowIdentifier ="Description", RowValue = import.oCultivationPlan.sDescription.ToString()}
    };
}

然后在aspx.cs类中,只需遍历List<ImportDto>并创建LiteralControls

foreach(var dto in importDtos)
{
var row = new TableRow();

var identifierCell = new TableCell();
var valueCell = new TableCell();

identifierCell.Controls.Add(new LiteralControl(dto.RowIdentifier));
valueCell.Controls.Add(new LiteralControl(dto.RowValue ));

row.Add(identifierCell);
row.Add(valueCell);

tblImportPreview.Controls.Add(row);
}

这样你将来需要做的就是添加新的过滤数据,就是修改你的映射函数并添加一个新的ImportDto,它会自动显示在前端。