Почему бы не очистить datagridview?? и как очистить datagridView? [закрыто]

avatar
Tokhi
9 августа 2021 в 02:37
187
2
-1

Я хочу очистить строки в datagridView, но каждый код не работает, я искал, это ошибка?? мой код ниже

  private DataSet modelDS = null;
  modelDS = db.getModelList();

 /* 
  class db{
     private DataSet ds = null;
    public db(){
       ds = new DataSet();
       setModelList();
     }
    private void setModelList(){
       //after DB Query
       oda.Fill(ds);  
     }
    public DataSet getModelList(){
       retrun ds;
    }
   }

  */

 dataGridView18.DataSource = modelDS.Tables[0];

  //row list delete or add  by user in only dataGridView
  //users can not save them and they click only reload button

private void button1_Click (object sender , EventArgs e){
    //reload button envent
    //after clearing DataGridView ,dataSource reloaded
    datagridView18.DataSource = null (not working)

    datagridView18.Rows.clear() (not working)
    
    DataTable dt = (DataTable)datagridview18.DataSource
    dt.Clear() or dt.Rows.Clear() (not working)
    
    foreach(DataGridViewRow row in datagrdiview18.Rows)
    datagridView18.Rows.Remove(row) (not working)
    
    dataGridView18.DataSource =  modelDS.Tables[0];

}

после перезагрузки содержимое в dataGridView не показывает содержимое modelDS.Tables, оно показывает отредактированное пользователем содержимое!!

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

в чем причина?? и как исправить?? спасибо

Источник
Jimi
9 августа 2021 в 02:43
1

Это: datagridView18.DataSource = null конечно полностью очищает DataGridView. После этого, что вы хотите сделать? Установить тот же источник данных, что и раньше? Тот, который был изменен? Вы хотите повторно запросить данные, чтобы отменить любой ввод пользователя? Является ли ввод пользователя каким-либо образом значимым?

Zer0
9 августа 2021 в 02:51
0

Можете ли вы написать небольшой код, воспроизводящий проблему? Непонятно, что вы пытаетесь сделать и в чем проблема. Я предполагаю, что где-то вы либо отправляете в базу данных, либо снова захватываете таблицу из-за этой строки, которую я больше нигде не вижу? modelDS = db.getModelList();

Tokhi
9 августа 2021 в 06:08
0

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

Ответы (2)

avatar
Caius Jard
9 августа 2021 в 06:06
0

список в dataGridView не показывает список modelDS.Tables, он показывает отредактированный пользователем список!!

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

.
class Form1{

  private DataTable dt = new DataTable();

  public Form1(){
    InitializeComponenent();

    dt.Columns.Add("Name");
    dt.Rows.Add("John");
    

  }

  private void unbindButton_Click(...){
    someDataGridView.DataSource = null;
  }
  
  private void bindButton_Click(...){
    someDataGridView.DataSource = dt;
  }
  
  private void show00Button_Click(...){
    MessageBox.Show(dt.Rows[0][0].ToString()); 
  }
}
  • Вы запускаете приложение
  • вы нажимаете кнопку BIND
  • установлен источник данных dgv
  • ты видишь Джона
  • вы редактируете на Мэри
  • таблица данных dt изменена. Да, действительно содержимое datatable изменено.
  • вы нажимаете ОТКЛЮЧИТЬ
  • вы нажимаете SHOW00, появляется MessageBox с надписью "mary"
  • вы нажимаете BIND, "Mary" появляется в сетке
  • это потому, что таблица данных редактируется и содержит Мэри

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

someDataGridView.DataSource = originalDataTable.Copy();
Tokhi
9 августа 2021 в 06:32
0

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

Caius Jard
9 августа 2021 в 06:56
0

Что вы подразумеваете под «списком данных»?

Tokhi
9 августа 2021 в 07:38
0

Я думаю, что datagridview должно отображаться содержимое таблицы данных, потому что источник данных должен быть установлен нулевым и перезагружать таблицу данных. не так ли?

Caius Jard
9 августа 2021 в 19:38
0

Я не могу понять, что вы спрашиваете. Datagridview показывает содержимое datatable. Вы не можете установить DataSource DGV как DataSet (набор таблиц данных), и DGV никогда не будет отображать «список таблиц данных», если вы не напишете код, который это делает.

Tokhi
9 августа 2021 в 23:57
0

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

Caius Jard
10 августа 2021 в 05:36
0

Я уверен, что сказал вам причину этого в ответе

Caius Jard
10 августа 2021 в 05:45
0

Я отредактировал ответ, может быть, это поможет

Tokhi
11 августа 2021 в 05:40
0

Спасибо!! ваш ответ был очень полезен для меня

Caius Jard
11 августа 2021 в 05:58
0

Нет проблем! Краткое руководство по использованию переполнения стека: когда кто-то пишет ответ, который вы считаете полезным или полезным, щелкните стрелку вверх над числом. Когда кто-то пишет ответ, который вы используете для решения своей проблемы, нажмите на серую галочку, чтобы она стала зеленой. Любое количество ответов может быть помечено как полезное, включая тот, который вы отметили, но только один ответ может быть отмечен как полезный. Отметьте ответ, когда ваша проблема будет решена — это изменит внешний вид вопроса на панели инструментов, чтобы люди знали, что вы все еще не ищете ответ.

avatar
Angelo Juanico
9 августа 2021 в 05:14
0

Попробовать

datagridView18.DataSource = null

Затем после

datagridView18.DataBind()
Caius Jard
9 августа 2021 в 05:59
0

Не уверен, что представление данных, о котором говорит OP, имеет метод DataBind.

Jimi
9 августа 2021 в 06:08
0

В DataGridView нет метода DataBind().