Как добавить новую строку в datagridview? - PullRequest
7 голосов
/ 08 марта 2012

У меня есть DataGridView, заполненный данными из источника данных (SQL). Теперь я хочу добавить новую строку, но не могу, потому что новые данные нельзя добавить в ограниченный DataGridView ...

Я пытался:

dataGridView1.Source = null;
dataGridView1.Rows.Add("1");

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

Ответы [ 4 ]

6 голосов
/ 08 марта 2012

Когда вы устанавливаете свойство DataSource на null, вы по существу удаляете все данные из DataGridView (так как это не ' больше не знаю, с чем связываться).

У вас есть два варианта здесь. Первый - обновить базовый источник данных. Давайте предположим, что это DataTable. В этом случае вы бы сделали что-то вроде:

DataTable dt = dataGridView1.Source as DataTable;
dt.Rows.Add(new object[] { ... });

И тогда DataGridView примет изменения (обратите внимание, что если вы не привязываетесь к чему-то, что не реализует INotifyCollectionChanged интерфейс , вам придется вызвать ResetBindings метод для обновления сетки).

Другой вариант - позволить DataGridView управлять строками. Это можно сделать, добавив каждый элемент вручную, используя метод Add в DataGridViewRowCollection, возвращаемый свойством Rows :

foreach (var item in source)
{
    dataGridView1.Rows.Add("1", "2", "3", ...);
}

Я бы не сказал, что второе решение является оптимальным , но оно будет работать.

Наконец, при условии, что вы привязываетесь к DataTable (или к какой-либо другой материализации данных из базового источника данных), это никак не влияет на обновление базового источника данных (это будет отдельный вопрос).

1 голос
/ 08 марта 2012

Короткий ответ: нет.

Когда вы установили для DataSource значение null, вы нарушили связь между вашим DataGridView и источником данных, поэтому его данные не будут сохранены. Вы не можете добавить строку к границе DataGridView, потому что она должна представлять состояние базового DataSource; вы фактически просите .net сделать вашу таблицу не синхронизированной с резервным хранилищем, в первую очередь побеждая цель привязки данных.

Если вы хотите добавить строку в резервное хранилище, вы должны добавить строку в DataSource, а не в DataGridView.

0 голосов
/ 01 января 2013

Вы просто добавляете строки, используя метод add для сбора строк

me.datagridview1.rows.add("first","second","third");

Вы можете добавить любое количество элементов в коллекцию массивов.

0 голосов
/ 08 марта 2012

может быть, вы хотите сделать это вручную и подробно?Как то так?

        DataSet ds = new DataSet();
        OleDbDataAdapter adapter = null;
        adapter = new OleDbDataAdapter("SELECT * FROM  WHERE", conn);
        adapter.Fill(ds);
        dataGridView1.ColumnCount = 5; //how many columns returns your SQL query? starts with 0

        dataGridView1.Columns[0].Name = "COl-1";
        dataGridView1.Columns[1].Name = "COl-2";
        dataGridView1.Columns[2].Name = "COl-3";
        dataGridView1.Columns[3].Name = "COl-4";
        dataGridView1.Columns[4].Name = "COl-5";

        DataTable dt = ds.Tables[0];

        foreach (DataRow dr in dt.Rows)
        {
            dataGridView1.Rows.Add(
            (dr["COL_HEADER_NAME1"].ToString()),
            (dr["COL_HEADER_NAME2"].ToString()),
            (dr["COL_HEADER_NAME3"].ToString()),
            (dr["COL_HEADER_NAME4"].ToString()),
            (dr["COL_HEADER_NAME5"].ToString()));
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...