我需要从数据表中删除几列并绑定到网格视图。所以我尝试了以下代码:
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
获得具有表格相同架构(没有数据)或Copy
的DataTable
,以创建具有所有数据的克隆:
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()
方法混淆,该方法仅包括结构,而不是数据