我想创建一个带有指定列的数据表类,我可以使用它来调用方法,比如复制或聚合,我可以迭代一些记录并添加到表中。
我以为我可以创建私有和公共变量集,并将表的值分配给我的默认值,例如:
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的记录时,这不会像迭代那样运行,我不希望每次都创建数据表;我希望数据表创建一次定义,创建一次数据行,然后在每次迭代时,根据定义中的列名将数据添加到新行。我的想法是,类将具有永远不会更改的数据表定义,以及可以在每次迭代时更改并添加到表中的数据行。
基于我正在尝试做什么,我哪里出错,或者这是否可能?
答案 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
类公开的任何其他功能,只需根据需要添加更多类似的传递方法。包装器本身非常简单,只需要包装类型的私有成员和传递方法来公开所需的功能。