2013-10-15 46 views
0

我有一个datagridview,我从数据表中填充它,然后从webservice查询(针对SalesForce云系统)检索它的数据。添加第二个数据表作为datagridview的行来源

本质上,我们想要显示试图从SalesForce案例中删除附件的结果,这些案例已经被用户放在那里,目前我们查询一个名为case的SalesForce XML webservice,并且我们想添加查询第二个新的SalesForce对象叫做credit case

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

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

一旦数据集填充我们设置使用gvTaskCases.DataSource = dtCases;

在DataGridView的数据源,但当然,我现在有一个数据源第二(具有不同列数),我要添加到表中。

如果我用我的新数据表(gvTaskCases.DataSource = dtcreditCases)这样做,我该如何阻止它替换现有数据表中的数据?

CODE:

gvTaskCases.DataSource = null; 

     dtCases.Rows.Clear(); 

     foreach (task_cases item in cases) 
     { 
      DataRow drCases = dtCases.NewRow(); 

      // Then add the new row to the collection. 
      drCases["Case ID"] = item.c_Id; 
      drCases["Case Number"] = item.c_Number; 
      drCases["Case Topic"] = item.c_Topic; 
      drCases["Case SubTopic"] = item.c_Subtopic; 
      drCases["Account Number"] = item.c_CustomerNumber; 
      drCases["Additional Info"] = item.c_AdditionalInfo; 
      drCases["Closed Date"] = Convert.ToDateTime(item.c_ClosedDate).ToString("dd/MM/yyyy"); 
      drCases["Attachment"] = item.c_Attachment; 
      drCases["Content Type"] = item.c_ContentType; 
      drCases["Detach Status"] = item.c_Status; 
      drCases["Document Type"] = item.c_DocumentType; 
      drCases["Imaging Directory"] = item.c_ImagingDSXDirectory; 
      drCases["Imaging Document"] = item.c_ImagingDocument; 

      dtCases.Rows.Add(drCases); 
     } 

     gvTaskCases.DataSource = dtCases; 


     gvTaskCases.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; 
     gvTaskCases.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

     foreach (task_creditcases item in creditCases) 
      { 
      DataRow drCases = dtCases.NewRow(); 

      // Then add the new row to the collection. 
      drCases["Case ID"] = item.c_Id; 
      drCases["Case Number"] = item.c_Name; // SalesForece Credit Case Object CASE NUMBER; 
      drCases["Account Number"] = item.c_Account__c; 
      drCases["Closed Date"] = Convert.ToDateTime(item.c_Closed_Date__c).ToString("dd/MM/yyyy"); 
      drCases["Attachment"] = item.c_Imaging_Document_Attached__c; 
      drCases["Detach Status"] = item.c_Status__c; 
      drCases["Document Type"] = item.c_Document_Type__c; 
      drCases["Imaging Directory"] = item.c_Directories__c; 
      drCases["Imaging Document"] = item.c_Imaging_Document; 

      dtCases.Rows.Add(drCases); 
      } 

     // add the new records: 

     // Adjust size & hide columns that aren't needed 
     gvTaskCases.Columns[0].Visible = false; 
     gvTaskCases.Columns[11].Visible = false; 
     gvTaskCases.Columns[12].Visible = false; 
     gvTaskCases.Columns[13].Visible = false; 
+0

要同时显示在相同的旧数据和新数据电网在同一时间?你的新数据结构如何? –

+0

好吧,它非常相似,只是可能需要在我的数据表中添加几个空白列或空列...... –

+0

@KingKing:我编辑了我的问题以给出更多的解释,并添加了代码块,隐藏一些列是我想添加第二个数据表的地方 –

回答

1

您可以使用DataTableMerge方法。

((DataTable) gvTaskCases.DataSource).Merge(dtcreditCases); 

另一种方法只是保持你的旧DataTable,你必须使用一个小LINQ合并dataTables这样的:

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