Почему я не вижу DataGridViewRow, добавленный в DataGridView? - PullRequest
5 голосов
/ 18 апреля 2011

Я пытаюсь показать строки в DataGridView.

Вот код:

foreach (Customers cust in custList)
            {
                string[] rowValues = { cust.Name, cust.PhoneNo };
                DataGridViewRow row = new DataGridViewRow();
                bool rowset = row.SetValues(rowValues);
                row.Tag = cust.CustomerId;
                dataGridView1.Rows.Add(row);
            }

При загрузке формы я инициализировал dataGridView1 как:

dataGridView1.ColumnCount = 2;
dataGridView1.Columns[0].Name = "Name";
dataGridView1.Columns[1].Name = "Phone";

После выполнения этого кода происходят четыре заметные вещи:

  • Я вижу новую строку, созданную в dataGridView1.
  • Там нет текста.
  • rowset имеет значение false после row.SetValues ​​метод выполняется.
  • Значение тега строки установлено правильно.

Почему DataGridView не показывает данные?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011
List<customer> custList = GetAllCustomers();
            dataGridView1.Rows.Clear();

            foreach (Customer cust in custList)
            {
                //First add the row, cos this is how it works! Dont know why!
                DataGridViewRow R = dataGridView1.Rows[dataGridView1.Rows.Add()];
                //Then edit it
                R.Cells["Name"].Value = cust.Name;
                R.Cells["Address"].Value = cust.Address;
                R.Cells["Phone"].Value = cust.PhoneNo;
                //Customer Id is invisible but still usable, like,
                //when double clicked to show full details
                R.Tag = cust.IntCustomerId;
            }

http://aspdiary.blogspot.com/2011/04/adding-new-row-to-datagridview.html

1 голос
/ 19 июня 2011

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

После продолжительной игры с классом DataGridViewRow я нашел метод для NewRow.CreateCells (DataGridView, object []).

Это позволяет правильно отображать ячейки в форматах из таблицы данных.

Кажется, код вопроса в верхней части этой страницы оставил ячейки пустыми, потому что типы не совпадали, когда новая строка вставлялась в сетку данных. Использование метода CreateCells в новой строке и анализ DataGridView, в который будет вставлена ​​строка, позволяет передавать типы ячеек в новую строку, которая, в свою очередь, фактически отображает данные на экране.

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

Пожалуйста, посмотрите мой код ниже как пример этого .....

    private void DisplayAgents()
    {
        dgvAgents.Rows.Clear();
        foreach (Classes.Agent Agent in Classes.Collections.Agents)
        {
            DisplayAgent(Agent, false);
        }
    }

    private void DisplayAgent(Classes.Agent Agent, bool Selected)
    {
        DataGridViewRow NewRow = new DataGridViewRow();
        NewRow.Tag = Agent;
        NewRow.CreateCells(dgvAgents, new string[]
        {
             Agent.Firstname,
             Agent.Surname,
             Agent.Email,
             Agent.Admin.ToString(),
             Agent.Active.ToString(),
        });

        dgvAgents.Rows.Add(NewRow);
        NewRow.Selected = Selected;
    }
0 голосов
/ 18 апреля 2011
foreach (Customers cust in custList)
            {
                  DataGridViewRow row = new DataGridViewRow();
                  dataGridView1.BeginEdit();
                  row.Cells["Name"] = cust.Name;
                  row.Cells["Phone"] = cust.PhoneNo;
                  row.Tag = cust.CustomerId;
                  dataGridView1.Rows.Add(row);
                  dataGridView1.EndEdit();
            }

попробуйте

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