Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# DataGridView合并_C#_Datagridview_Merge - Fatal编程技术网

C# DataGridView合并

C# DataGridView合并,c#,datagridview,merge,C#,Datagridview,Merge,是否可以将C#中的两个独立的DataGridView合并为一个?我对每个DataGridView使用两个独立的SortableBindingList 下面是名为chipdgv的第一个DataGridView的代码 theChipList.Add(new Chip(splitLine[0], splitLine[1], xValue, yValue, rotation, splitLine[5])); theChipDGV.DataSource = theChipList; theDataBas

是否可以将C#中的两个独立的
DataGridView
合并为一个?我对每个
DataGridView
使用两个独立的
SortableBindingList

下面是名为chipdgv的第一个DataGridView的代码

theChipList.Add(new Chip(splitLine[0], splitLine[1], xValue, yValue, rotation, splitLine[5]));
theChipDGV.DataSource = theChipList;
theDataBaseList.Add(new DataBase(dataBaseSplit[0], dataBaseSplit[1], dataBaseSplit[2], dataBaseSplit[3], dataBaseSplit[4], dataBaseSplit[5], dataBaseSplit[6], 0));
theDataBaseDGV.DataSource = theDataBaseList;
下面是第二个DataGrid视图的代码,称为DatabasedGV

theChipList.Add(new Chip(splitLine[0], splitLine[1], xValue, yValue, rotation, splitLine[5]));
theChipDGV.DataSource = theChipList;
theDataBaseList.Add(new DataBase(dataBaseSplit[0], dataBaseSplit[1], dataBaseSplit[2], dataBaseSplit[3], dataBaseSplit[4], dataBaseSplit[5], dataBaseSplit[6], 0));
theDataBaseDGV.DataSource = theDataBaseList;
编辑:

theFinalDGV.DataSource = theChipList + theDataBaseList;

theFinalDGV.DataSource = theChipList + theDataBaseList;
既然我认为这两种方法都不起作用,那么还有别的方法吗


如果是,这怎么可能? EDIT2: 然而,使用它只抓取一行,我需要抓取每一行。。即使一个列表大于另一个列表,我也要填写空白点。

我试图搞乱这个:

int chipRowCount = theChipDGV.Rows.Count;
int dataBaseRowCount = theDataBaseDGV.Rows.Count;
int greaterValue = 0;

if (chipRowCount > dataBaseRowCount)
    greaterValue = chipRowCount;
else
    greaterValue = dataBaseRowCount;

int i = 1;

while (i < greaterValue)
{
    // Place the above **EDIT2** code here. (theLoadList.Add(new LoadLine(...));
}
int chipRowCount=chipdgv.Rows.Count;
int dataBaseRowCount=databasedgv.Rows.Count;
int greaterValue=0;
如果(chipRowCount>dataBaseRowCount)
greaterValue=芯片行数;
其他的
greaterValue=数据库行计数;
int i=1;
而(i<更大的值)
{
//将上面的**编辑2**代码放在这里。(加载列表。添加(新加载线(…));
}

这里有几种方法

我不熟悉
SortableBindingList
,但您可以将两个列表合并为一个,然后将其绑定到DataGridView。如果两个
SortableBindingList
具有不同的类型(一个是
芯片
,另一个是
数据库
)问题是您始终可以创建一个接口并让两种类型都实现它。然后,您可以将
sortablebindingslist
s中的类型T更改为您的接口,然后将此组合列表合并并绑定到DataGridView

另一种方法是将两个DataGridView中的行复制到第三个DataGridView中

方法如下:

private DataGridViewRow[] CloneDataGridViewRows(DataGridView dgv) {
    var rowArray = new DataGridViewRow[dgv.Rows.Count];
    for (int i = 0; i < dgv.Rows.Count; i++) {
        DataGridViewRow clonedRow = (DataGridViewRow)dgv.Rows[i].Clone();
        for (int c = 0; c < clonedRow.Cells.Count; c++) {
            clonedRow.Cells[c].Value = dgv.Rows[i].Cells[c].Value;
        }
        rowArray[i] = clonedRow;
    }
    return rowArray;
}
请注意,如果DGV的
AllowUserToAddress
为真,此方法将复制添加到DGV的“空”行。如果是这种情况,并且您不想要该空行,请将
rowArray
的大小调整为比我显示的小一行,并在外部for循环中测试此类行的新行:

if (!dgv.Rows[i].IsNewRow) {
    // Do the copy...
}

此外,在合并之前,请确保目标DGV的列数与源DGV的列数相同。

您是指在可视级别还是数据级别?您希望从合并操作中得到什么结果?@Gabriel:因为这是一个使用
SortableBindingList
的过程,所以它将同时处理数据和可视级别…答案是肯定的已更新以显示我希望从合并操作中得到什么…如果我不复制行,而是希望从第一个
DataGridView
末尾的第二个
DataGridView
复制列,该怎么办?因此,如果第一个DGV有4列,而第二个DGV有2列,它将变成:
DGV1-column1 DGV1-column2 DGV1-column3 DGV1-column4 DGV2-column1 DGV2-column2
。以及要复制的列中的每一行too@theNoobGuy您可以向第一个DGV中添加一列,然后在第二个DGV中的行中循环。对于每一行,将单元格的值从第一个DGV复制到单元格中(新增自“添加”列)在第二个DGV中。如果这样做,第二个DGV行中的其他值都不会被修改。显然,这取决于“同步”的两个DGV之间对应行B中的数据。(即,当它们像这样组合时,它们是有意义的。)错误声明:无法将任何行添加到没有列的DataGridView控件。必须首先添加列。我应该添加第三个DGV在合并之前需要具有正确的列数!我一直在混乱您的代码,似乎使它更接近我要查找的内容。但是不准确。我更新了我的问题如果您想看一看,请提供更多信息:)。谢谢