从数据表C#中删除几列

时间:2014-01-20 14:02:21

标签: c# datatable

我需要从datatable中删除几列并绑定到网格视图。所以我尝试了以下代码:

        obj_dt = obj_backup.sale_where_date();

        grd_excel.DataSource = obj_dt;

        obj_dt_pdf = obj_dt;

        // to remove few columns in data table 

        obj_dt_pdf.Columns.Remove("Location");
        obj_dt_pdf.Columns.Remove("No Opn Stack");
        obj_dt_pdf.Columns.Remove("Expiry Date");
        obj_dt_pdf.Columns.Remove("Discount %");
        obj_dt_pdf.Columns.Remove("Discount Amt");
        obj_dt_pdf.Columns.Remove("TAX");
        obj_dt_pdf.Columns.Remove("VAT");
        obj_dt_pdf.Columns.Remove("Entry Date");

        dataGridView_wd_pdf.DataSource = obj_dt_pdf;

问题是在删除obj_dt_pdf中的列后,它也从obj_dt中删除。我需要单独删除obj_dt_pdf 我犯错的地方?

4 个答案:

答案 0 :(得分:1)

然后不要使用相同的参考。您可以使用Clone获取具有相同表格(无数据)的DataTableCopy来创建包含所有数据的克隆:

obj_dt = obj_backup.sale_where_date();
var copy = obj_dt.Copy();
copy.Columns.Remove("Location");
copy.Columns.Remove("No Opn Stack");
// ...
dataGridView_wd_pdf.DataSource = copy;

答案 1 :(得分:0)

当您将obj_dt分配给obj_dt_pdf时,您没有复制DataTable - 您只需复制DataTable实例的引用。因此,这使得两个变量都指向相同的DataTable实例:

obj_dt_pdf = obj_dt;

改为创建DataTable的副本(使用DataTable.Copy()方法复制表结构和数据):

obj_dt_pdf = obj_dt.Copy();

现在obj_dt_pdf指向原始DataTable的副本,副本的更改不会影响原始DataTable实例。

答案 2 :(得分:0)

DataTable是一个类,类是“引用类型”,这意味着当您将它分配给另一个变量时,您只有两个指向同一实例的变量。

你需要创建一个对象的“副本”,幸运的是,DataTable有一个Copy() method,所以你可以这样做:

obj_dt_pdf = obj_dt.Copy();

不要Clone() method混淆,后者只包含结构,而不包含数据

答案 3 :(得分:0)

你需要使用Copy,所以像这样:

obj_dt_pdf = obj_dt.Copy();

而不是:

obj_dt_pdf = obj_dt;

Copy方法会复制结构。

相关问题