DataGridView Matching - PullRequest
       5

DataGridView Matching

0 голосов
/ 21 августа 2011

У меня есть 2 DataGridView (DGV).

theChipDGV будет содержать такие данные (за исключением многих других столбцов) :

______________________________________________________________
|  NAME  |  P/N   |  X     |  Y     |  ROTATION  |  PACKAGE  |
|________|________|________|________|____________|___________|
| R16    | 147479 | 20.325 | 100.000| 0          | 0603      |
| C6     | 14739  | -5.325 | -10.105| 180        | 0603      |
| U45    | 123456 | 12.345 | 12.345 | 45         | 0402      |
|________|________|________|________|____________|___________|

theDataBaseDGV будет содержать такие данные (за исключением многих других столбцов) :

____________________________________________________________________________________________
|  PACKAGE  |  DESCRIPTION  |  FEEDER  |  VISION  |  SPEED  |  MACHINE  |  WIDTH  |  TIME  |
|___________|_______________|__________|__________|_________|___________|_________|_______ |
| PLCC20    |  N/A          | 25MM     |  N/A     |  3      | UNIVERSAL |  12MM   |  0.05  |
| 0603      |  0603C_1.0    | 8X4      |  1       |  1      |   FUJI-1  |  8MM    |  20    |
| 0603      |  0603R_1.0    | 12X4     |  1       |  5      |   FUJI-2  |  16MM   |  0.20  |
|___________|_______________|__________|__________|_________|___________|_________|_______ |

Я хотел бы сопоставить столбец в theChipDGV с пометкой PACKAGE с тем же помеченным столбцом в theDataBaseDGV. Если есть совпадение, вся строка будет объединена в новый DGV (давайте обозначим его: theFinalDGV) . Кроме того, если тип PACKAGE соответствует и также находится в следующей строке (например, 0603), он проверит, начинается ли столбец с меткой Name в theChipDGV с R или C . В зависимости от того, с чего он начинается, будут определены остальные столбцы из theDataBaseDGV, которые будут использоваться.

SO:

theFinalDGV будет выглядеть так:

_____________________________________________________________________________________________________________________________________________
|  NAME  |  P/N   |  X     |  Y     |  ROTATION  |  PACKAGE  |  DESCRIPTION  |  FEEDER  |  VISION  |  SPEED  |  MACHINE  |  WIDTH  |  TIME  |
|________|________|________|________|____________|___________|_______________|__________|__________|_________|___________|_________|________|
| R16    | 147479 | 20.325 | 100.000| 0          | 0603      |  0603R_1.0    | 12X4     | 1        | 5       | FUJI-2    | 16MM    | 0.20   |
| C6     | 14739  | -5.325 | -10.105| 180        | 0603      |  0603C_1.0    | 8X4      | 1        | 1       | FUJI-1    | 8MM     | 20     |
| U45    | 123456 | 12.345 | 12.345 | 45         | 0402      |               |          |          |         |           |         |        |
|________|________|________|________|____________|___________|_______________|__________|__________|_________|___________|_________|________|

Обратите внимание, что при отсутствии совпадений столбцы остаются пустыми.

Итак:

Кто-нибудь знает, как я могу это сделать? В основном я хотел бы знать, как сопоставить значения из одного столбца с другим, и если существует несколько столбцов из theDataBaseDGV, которые имеют одинаковые значения, то как правильно их сопоставить.

1 Ответ

0 голосов
/ 22 августа 2011
            int chipRowCount = theChipDGV.RowCount;
            int dataBaseRowCount = theDataBaseDGV.RowCount;

            for (int count = 0; count < chipRowCount; count++)
            {
                for (int i = 0; i < dataBaseRowCount; i++)
                {
                    if (theChipList[count].PkgStyle.Equals(theDataBaseList[i].PackageType) || (theChipList[count].PkgStyle.Contains(theDataBaseList[i].PackageType) &&
                        theDataBaseList[i].PartDescription.Contains("R") && theChipList[count].Name.StartsWith("R")) || ((theChipList[count].PkgStyle.Contains(theDataBaseList[i].PackageType) &&
                        theDataBaseList[i].PartDescription.Contains("C") && theChipList[count].Name.StartsWith("C"))))
                    {
                        if (!theChipList[count].Used)
                        {
                            theChipList[count].Used = true;
                            theFinalList.Add(new LoadLine(theChipList[count].Name, theChipList[count].PartNumber,
                                theChipList[count].XPlacement, theChipList[count].YPlacement, theChipList[count].Rotation,
                                theChipList[count].PkgStyle, theDataBaseList[i].PackageType, theDataBaseList[i].PartDescription,
                                theDataBaseList[i].Feeder, theDataBaseList[i].Vision, theDataBaseList[i].Speed,
                                theDataBaseList[i].Machine, theDataBaseList[i].TapeWidth, 0));

                            theFinalDGV.DataSource = theFinalList;
                        }
                    }
                }
            }

            for (int count = 0; count < theChipList.Count; count++)
            {
                if (!theChipList[count].Used)
                {
                    theFinalList.Add(new LoadLine(theChipList[count].Name, theChipList[count].PartNumber,
                        theChipList[count].XPlacement, theChipList[count].YPlacement, theChipList[count].Rotation,
                        theChipList[count].PkgStyle, string.Empty, string.Empty, string.Empty, string.Empty,
                        string.Empty, string.Empty, string.Empty, 0));
                }
            }
...