2013-10-15 106 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(); 
相關問題