Объединение ячейки DataGridView в Winforms после добавления новой строки - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю приложение WinForms в Visual Studio 2017,

У меня есть dataGridView, созданный с данными строк, такими как:

-----------------------------------------------------------
| V |      Data 1      | Data 1 Quantity | Data 1 Details |
-----------------------------------------------------------

После создания этих данных пользователь вводитнекоторые данные в текстовое поле и отправляет.

затем программа добавляет новую строку в dataGridView, таблица выглядит следующим образом:

---------------------------------------------------------------
| V |      Data 1      | Data 1 Quantity   | Data 1 Details   |
---------------------------------------------------------------
| V |      Data 1      | Data 1.A Quantity | Data 1.A Details |
---------------------------------------------------------------

То, что я хотел бы иметь, так как V и Data1 - это то же самое, что программное обеспечение объединяет обе ячейки, чтобы стать чем-то вроде этого.

-----------------------------------------------------------------
| V   |      Data 1      | Data 1 Quantity   | Data 1 Details   |
                         ---------------------------------------- 
|     |                    Data 1.A Quantity | Data 1.A Details |
-----------------------------------------------------------------

Есть ли способ объединить эти ячейки?Я пытался во многих отношениях также Google, но не нашел подходящего способа.Если возможно показать эти данные другим способом без использования datagridview, но результат будет таким, каким я это показал, это также решит мою проблему.

1 Ответ

0 голосов
/ 21 сентября 2018

Во-первых, какой смысл отображать подобное, поскольку во второй строке базы данных будут значения V и Data 1.

Что вы можете сделать, если щелкнуть по пользователю, чтобы добавить строку, проверить,В некоторых ячейках базы данных есть одинаковые параметры (в вашем случае первая и вторая), и если это так, то не добавляйте новую строку, а изменяйте текущую, а в других ячейках добавляйте новые значения, кроме старых.

Если вы делаете это кактогда ваш dataGridView отобразит его в виде одной строки

-----------------------------------------------------------------
| V   |      Data 1      | Data 1 Quantity   | Data 1 Details   | //when editing existing cell value add new line so it displays like this
|     |                  | Data 1.A Quantity | Data 1.A Details |
-----------------------------------------------------------------

Две другие вещи, которые вы можете сделать:

  • Создать пользовательский элемент управления, который наследуется от DataGridView класса и внутриэто создаст функцию, которая автоматически объединит ячейки с некоторым условием и отобразит его, как вам нравится (уровень advenced)
  • Создайте метод расширения для DataGridView, который удалит данные некоторых ячеек по некоторому условию

Пример второго решения выглядит следующим образом:

public static void EmptyOnDuplicateData(this DataGridView dgv, string columnToEmpty)
{
    List<string> ExistingData = new List<string>(); //I would do this with T and instead of passing string i would pass DataGridViewColumn so i could get type and other things but that is on you and i am just writing example

    foreach(DataGridViewRow row in dgv.Rows)
    {
        if(ExistingData.Contains(row.Cells[columnToEmpty].Value)) //Data from this cell already existed before this cell
        {
            row.Cells[columnToEmpty].Value == ""; //We clear that from that cell
        }
        else // Data from this cell doesn't exist anywhere before
        {
            ExistingData.Add(row.Cells[columnToEmpty].Value);
        }
    }
}

И вы просто вызываете его после заполнения DataGridView с помощью yourDgv.EmptyOnDuplicateData("SomeColumn");

Я хочу упомянуть tПриведенный выше код является просто примером, и в нем есть много нехороших вещей, но, как я уже сказал, это всего лишь пример, и я не хочу писать код для вас, поэтому у вас есть база и просто улучшите ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...