Я работаю с разными источниками данных, которые имеют разные столбцы. Например, DataTable1 имеет столбцы A, B и C. а DataSource2 имеет столбцы X, Y, Z.
В моем приложении формы Windows я разрешаю пользователю просматривать определенный файл Excel с помощью Format1 (A, B, C) и Format2 (X, Y, Z). когда я загружаю первый источник данных1 в виде сетки, он показывает столбцы A, B, C и данные из Excel. Но когда я загружаю Format2. Datagridview сохраняет формат Datasource1 и отображает столбцы (A, B, C, X, Y, Z).
Обратите внимание, что у меня есть общий datagridview для обоих источников данных. Кроме того, я пробовал следовать
DataTable.Clear();
DataTable.Columns.Remove("");
AutoGeneratedColumns=False;
Как убедиться, что datagridview показывает только текущие столбцы, связанные с источником данных, пока пользователь выбирает файл excel.
Источник данных1 - Формат 1 - A,B,C DataSource2 - Формат 2 - X, Y, Z





Попробуй это:
Datagridview.Columns.Clear();
Datagridview.Rows.Clear();
Datagridview.Refresh();
Datagridview.DataSource = null;
Это вряд ли поможет. Проблема в том, что отображаются дополнительные столбцы, которые не нужны. Так что очистка строк ничего не даст. Кроме того, это girdview с привязкой к данным, поэтому изменения в том, что должно быть внесено в отображаемую таблицу данных, а не в саму сетку
Я так не думаю, проблема в том, что Datagridview сохраняет формат из Datasource1 и показывает столбцы (A, B, C, X, Y, Z).
Ни одно из этих утверждений никоим образом не полезно для человека, задающего вопрос. Когда вы изменяете свойство DataSource DataGridView, оно удаляет все его столбцы и строки и создает новые из нового DataSource. Попробуйте код ARF, если не верите; он ничего не очищает в DGV, он просто меняет источник данных
это работает для меня:
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
dt1.Columns.Add("A");
dt1.Columns.Add("B");
dt1.Columns.Add("C");
dt2.Columns.Add("X");
dt2.Columns.Add("Y");
dt2.Columns.Add("Z");
dt1.Rows.Add("a", "a", "a");
dt2.Rows.Add("b", "b", "b");
private void Button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = dt1; // set datasource from dt1
}
private void Button2_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = dt2; // set datasource from dt2
}
Я согласен; в ситуации, когда требуется одно представление сетки данных для отображения разных наборов данных, данные должны быть разделены на разные таблицы данных, и их можно менять местами. Я бы также подумал о наличии элемента управления вкладкой и двух разных сеток, чтобы облегчить разработку и дать пользователю возможность пролистывать вперед и назад и легче видеть, что было чем, но это фактически то же самое решение, что и у вас здесь, только с другими элементами управления /немного другой интерфейс
вы можете использовать from new DataTable() в каждом действии. как еще один мой ответ.
почему ты настроен
AutoGeneratedColumns=False?