创建可重用的数据对象;仅添加迭代

时间:2017-02-20 00:10:09

标签: c# datatables

我想创建一个带有指定列的数据表类,我可以使用它来调用方法,比如复制或聚合,我可以迭代一些记录并添加到表中。

我以为我可以创建私有和公共变量集,并将表的值分配给我的默认值,例如:

private DataTable newTable;
public DataTable NewTable
{
    get { return newTable; }
    set
    {
        DataTable newTable= new DT();
        newTable.Columns.Add("Name", typeof(string));
        newTable.Columns.Add("Id", typeof(int));
    }
}

我的想法是一个人可以获得该表,但他们无法设置它,因为它被设置为默认值。但是,我看到来自界面的消息,即使我稍后在方法中使用它,它也总是为空。

我采取的另一个尝试是创建一个我可以在方法中使用的静态类,涉及上面设置的数据表:

static DataTable myDt()
{
     DataTable myDt = new DT();  
     myDt.Columns.Add("Name", typeof(string));
     myDt.Columns.Add("Id", typeof(int));
}

当有人迭代超过100K的记录时,这不会像迭代那样运行,我不希望每次都创建数据表;我希望数据表创建一次定义,创建一次数据行,然后在每次迭代时,根据定义中的列名将数据添加到新行。我的想法是,类将具有永远不会更改的数据表定义,以及可以在每次迭代时更改并添加到表中的数据行。

基于我正在尝试做什么,我哪里出错,或者这是否可能?

1 个答案:

答案 0 :(得分:0)

如果要包装数据表并且只允许使用代码向其添加行,那么根本不要公开数据表。保持私密。像这样:

public class MyTableWrapper
{
    private DataTable table { get; set; }

    public MyTableWrapper()
    {
        table = new DataTable();
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("Id", typeof(int));
    }
}

然后,为了允许用户添加一行,只需公开一个方法:

public void AddRow(DataRow newRow)
{
    table.Rows.Add(newRow);
}

您可能还希望在上述方法中进行一些错误检查,以验证提供的DataRow是否与表的架构匹配。如果它没有,只是抛出异常。

事实上,公开一个方法来生成一行消费代码也是一个好主意:

public DataRow GetNewRow()
{
    return table.NewRow();
}

对于您可能希望从内置DataTable类公开的任何其他功能,只需根据需要添加更多类似的传递方法。包装器本身非常简单,只需要包装类型的私有成员和传递方法来公开所需的功能。