我需要从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 我犯错的地方?
答案 0 :(得分:1)
然后不要使用相同的参考。您可以使用Clone
获取具有相同表格(无数据)的DataTable
或Copy
来创建包含所有数据的克隆:
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)