【问题标题】:How do I make this table shorter?如何使这张桌子更短?
【发布时间】:2014-09-23 07:53:35
【问题描述】:

我认为我在这里做错了什么。我在导入中有一个名为 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);

【问题讨论】:

  • Code Review 会更好吗?
  • 如果您想要选择几行,为什么不在构建表格之前先过滤掉列表。例如,使用一些简单的 linq 来返回您的过滤列表,或者为什么在开始建表过程之前不过滤列表。 (假设您在创建表之前知道要过滤的内容)
  • 嗯,事情是这样的。我有一个导出文件,其中包含数据列表。并且所有数据都被放入一个名为“importer”的类中。这个导入器类包含列表和对象。 oCultivationPlan 是对象之一。我可能不会过滤这个对象,因为它仍然需要被导入并保存到数据库中。但是我可以使用我想要的信息创建一个新类并从中创建一个表。这是可能的,但没有更好的选择吗?
  • 虽然这将是一个过滤器:P 但是是的,那么我将有 2 个具有相同信息的类。只有 1 包含的内容少于其他...

标签: c# asp.net row cell


【解决方案1】:

不是 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);
        }

【讨论】:

  • 是的,它有效。非常感谢这是我一直在寻找的。 :D U 是救生员 ;D
  • 没问题 :) 我刚读了你写的东西,虽然这应该不难 :D
  • 不要忘记通过选择答案将问题标记为已回答:)
  • awww 没有声誉因为它没有标记为已回答我现在很伤心:(呵呵
【解决方案2】:

我会创建一个强类型类

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

然后正如大卫所说,编写一个过滤函数来过滤 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&lt;ImportDto&gt; 并创建 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,它会自动显示在前端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多