Удаление строк из dataGridView с использованием dataTable - PullRequest
2 голосов
/ 17 марта 2011

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

Вот мой код, который пытается выполнить целую кучу удалений

       private void loadMSXGridView()
    {
        BindingSource bs = new BindingSource();

        dgv.DataSource = null;
        dgv.Refresh();
        bs.DataSource = GetTable();
        dgv.DataSource = bs;
        dgv.Columns[0].Width = 391;
        dgv.Columns[1].Width = 30;
    }

        private DataTable GetTable()
        {
            DataTable t = new DataTable();
            t.Rows.Clear();
            t.AcceptChanges();

            t.Columns.Add("Accounting Line", typeof(string));
            t.Columns.Add("#", typeof(string));
            foreach (AMAPnr.RemarkElement re in AMAPnr._RemarkElements)
            {
                if (re.ElementID == "RM" && re.FreeFlow.StartsWith("*MS"))
                {
                    DataGridViewCell gridCellText;
                    DataGridViewCell gridCellElement;

                    gridCellText = new DataGridViewTextBoxCell();
                    gridCellText.Value = re.FreeFlow;

                    gridCellElement = new DataGridViewTextBoxCell();
                    gridCellElement.Value = re.ElementNo.ToString();

                    t.Rows.Add(gridCellText.Value, gridCellElement.Value);
                }
            }
            return t;
        }

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

Ответы [ 5 ]

1 голос
/ 17 марта 2011

Если вы просто хотите добавить другой источник данных в качестве источника данных, выполните:

datagridview.DataSource = datatable;
datagridview.Invalidate();

Это должно сработать, так как я только что сделал то же самое в проекте, над которым я работаюв минуту:)

1 голос
/ 17 марта 2011

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

Тем не менее ..

Если вы хотите отфильтровать / отредактировать свои данные, вот как вы можете это сделать:

    DataSet ds1 = [Your Data Source]
DataSet ds2 = new DataSet();

ds2 = ds1.Clone();

for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{
    if (ds1.Tables[0].Rows[i].ItemArray[0].ToString() != "SomeValue")
    {        
        ds2.Tables[0].ImportRow(ds1.Tables[0].Rows[i]);
    }
}
ds1 = ds2;
1 голос
/ 17 марта 2011

Первоначально вы привязываете данные:

dgv.DataSource = GetTable();

затем следует продолжить привязку данных;либо попросите таблицу очистить себя (и повторно заполнить данные), либо просто назначьте другую таблицу данных для dgv.DataSource.

0 голосов
/ 17 марта 2011

Я бы предложил установить для источника данных вашего DataGridView значение BindingSource и вместо этого изменить источник данных BindingSource:

var table1 = GetDataTable();
var bindingSource1 = new BindingSource(table1, null);
dataGridView1.DataSource = bindingSource1;


// after reload
var table2 = GetDataTable();
bindingSource1.DataSource = table2;

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

0 голосов
/ 17 марта 2011

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

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