0

我有一个 datagridview,我从一个数据表中填充它,然后从 web 服务查询(针对 SalesForce 云系统)中检索它的数据。

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

它一直在从一个名为 case 的对象中获取数据,并将它们显示在 Windows 窗体 datagridview 控件中。

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

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

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

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

代码:

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;
4

1 回答 1

1

您可以Merge使用DataTable.

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

另一种方法是保留你的 old DataTable,你必须使用一点LINQ来合并dataTables这样的:

gvTaskCases.DataSource = (dtCases.Columns.Count > dtcreditCases.Columns.Count ?
                          dtCases.AsEnumerable().Concat(dtcreditCases.AsEnumerable()) :
                          dtcreditCases.AsEnumerable().Concat(dtCases.AsEnumerable())).CopyToDataTable();
于 2013-10-15T09:09:05.553 回答