Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加第二个datatable作为datagridview的行源_C#_Winforms_Datagridview_Datatable_Datasource - Fatal编程技术网

C# 添加第二个datatable作为datagridview的行源

C# 添加第二个datatable作为datagridview的行源,c#,winforms,datagridview,datatable,datasource,C#,Winforms,Datagridview,Datatable,Datasource,我有一个datagridview,我从datatable中填充它,datatable从webservice查询中检索它的数据(针对SalesForce云系统) 从本质上讲,我们希望显示用户从SalesForce案例中删除附件的结果,目前我们查询了一个名为case的SalesForce XML Web服务,并希望添加查询另一个名为credit case的新SalesForce对象的功能 它从一个名为cases的对象获取数据,并将其显示在Windows窗体datagridview控件中,工作正常 现

我有一个datagridview,我从datatable中填充它,datatable从webservice查询中检索它的数据(针对SalesForce云系统)

从本质上讲,我们希望显示用户从SalesForce案例中删除附件的结果,目前我们查询了一个名为
case
的SalesForce XML Web服务,并希望添加查询另一个名为
credit case
的新SalesForce对象的功能

它从一个名为cases的对象获取数据,并将其显示在Windows窗体datagridview控件中,工作正常

现在我们想添加另一个对象(我们称之为creditCases),所以我设置了query all,添加了另一个带有字段和数据类型的任务对象,等等

填充数据集后,我们使用
gvTaskCases.DataSource=dtCases设置datagridview的数据源

当然,我现在还有第二个数据源(具有不同的列数),我想将其添加到表中

如果我对新的数据表(
gvTaskCases.DataSource=dtcreditCases
)执行此操作,如何阻止它替换现有数据表中的数据

代码:


您可以使用
DataTable
Merge
方法

 ((DataTable) gvTaskCases.DataSource).Merge(dtcreditCases);
另一种方法是只保留旧的
数据表
,您必须使用一点
LINQ
来合并
数据表
,如下所示:

gvTaskCases.DataSource = (dtCases.Columns.Count > dtcreditCases.Columns.Count ?
                          dtCases.AsEnumerable().Concat(dtcreditCases.AsEnumerable()) :
                          dtcreditCases.AsEnumerable().Concat(dtCases.AsEnumerable())).CopyToDataTable();

是否要同时在同一网格中显示旧数据和新数据?你的新数据结构如何?嗯,非常相似,只是可能需要在我的数据表中添加两个空白或空列…@KingKing:我编辑了我的问题以提供更多说明,并添加了代码块,在我隐藏一些列的最后,我想添加第二个datatable。我想另一种方法可能是重用现有datatable
dtcases
,但如果可能的话,我想将它们分开。如果不清楚您想要什么,如果您想保留旧的
datatable
,可能您必须保留一些对它的引用,并从旧的和新的
DataTable
创建一个新的
DataTable
,当然这将改变
重用的含义。
gvTaskCases.DataSource = (dtCases.Columns.Count > dtcreditCases.Columns.Count ?
                          dtCases.AsEnumerable().Concat(dtcreditCases.AsEnumerable()) :
                          dtcreditCases.AsEnumerable().Concat(dtCases.AsEnumerable())).CopyToDataTable();