从数据表C#中删除几列



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

        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中删除。
我在哪里犯错?

然后不要使用相同的参考。您可以使用Clone获得具有表格相同架构(没有数据)或CopyDataTable,以创建具有所有数据的克隆:

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;

当您将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实例。

您需要使用 Copy,所以类似的东西:

obj_dt_pdf = obj_dt.Copy();

而不是这样:

obj_dt_pdf = obj_dt;

Copy方法将同时复制结构数据。

DataTable是一个类,类是"参考类型",这意味着当您将其分配给另一个变量时,您只有两个变量指向同一实例。

您需要创建一个对象的"复制",而幸运的是,DataTable具有Copy()方法,因此您可以执行此操作:

obj_dt_pdf = obj_dt.Copy();

不要将其与Clone()方法混淆,该方法仅包括结构,而不是数据

最新更新