как очистить вид сетки данных

<p>я пытаюсь заполнить datagridview на основе выбранного элемента в combobox, у меня эта часть работает.</p><p>однако мне нужно иметь возможность очистить сетку перед добавлением новых данных из нового элемента, а не просто добавлять в конец. </p><p><strong> как мне очистить datagridview перед добавлением элементов к нему? </strong></p>

<p>во-первых, обнулите источник данных:</p><pre><code>this.datagridview.datasource = null; </code></pre><p>затем очистите строки:</p><pre><code>this.datagridview.rows.clear(); </code></pre><p>затем установите источник данных в новый список:</p><pre><code>this.datagridview.datasource = this.getnewvalues(); </code></pre>

<p>если это связано с источником данных -</p><pre><code>datagridview.datasource=null; datagridview.rows.clear(); </code></pre><p>работал на меня.</p>

<p>вы можете очистить <code>datagridview</code> таким образом </p><pre><code>datagridview1.rows.clear(); datagridview1.refresh(); </code></pre><p>если это <code>databound</code>, попробуйте это</p><pre><code>datagridview1.rows.clear() // if dgv is bound to datatable datagridview1.databind(); </code></pre>

<p>если вы хотите очистить не только данные, но и поля со списком, флажки, попробуйте</p><pre><code>datagridview.columns.clear(); </code></pre>

<pre><code>datagrid.datasource = null; datagrid.databind(); </code></pre>

<p>вы можете назначить источник данных как нулевой в вашей сетке данных, а затем привязать его заново.</p><pre><code>dg.datasource = null; dg.databind(); </code></pre>

<p>вы могли бы взять эту следующую инструкцию и сделать работу с отсутствием производительности. если вы хотите увидеть эффект этого, поместите одну из двух следующих инструкций (технически аналогичных), где вам нужно очистить datagridview, в блок try {} catch (...) {} finally и дождаться, что произойдет.</p><pre><code> while (datagridview1.rows.count > 1) { datagridview1.rows.removeat(0); } foreach (object \_cols in datagridview1.columns) { datagridview1.columns.removeat(0); } </code></pre><p>вы улучшаете эту задачу, но ее недостаточно, существует проблема сброса datagridview из-за столбцов, которые остаются в объекте datagridview. наконец, я предлагаю, лучший способ, который я реализовал в своей домашней практике, - обработать этот gridview как файл со строками и столбцами: набор записей, основанный на совпадении строк и столбцов. если вы можете улучшить, тогда выберите свой выбор a) или b): foreach или while.</p><pre><code> //(a): with foreach foreach (object \_cols in datagridview1.columns) { datagridview1.columns.removeat(0); } foreach(object \_row in datagridview1.rows){ datagridview1.rows.removeat(0); } //(b): with foreach while (datagridview1.rows.count > 1) { datagridview1.rows.removeat(0); } while (datagridview1.columns.count > 0) { datagridview1.columns.removeat(0); } </code></pre><p>ну, как рекомендация никогда в своей жизни не удаляйте столбцы в первую очередь, порядок перед строками после столбцов, потому что логически столбцы были созданы сначала, а затем строки. это было бы штрафом с точки зрения правильного анализа.</p><pre><code> foreach (object \_cols in datagridview1.columns) { datagridview1.columns.removeat(0); } foreach (object \_row in datagridview1.rows) { datagridview1.rows.removeat(0); } while (datagridview1.rows.count > 1) { datagridview1.rows.removeat(0); } while (datagridview1.columns.count > 0) { datagridview1.columns.removeat(0); } </code></pre><p>затем поместите его в функцию или метод.</p><pre><code> private void cleardatagridviewloopwhile() { while (datagridview1.rows.count > 1) { datagridview1.rows.removeat(0); } while (datagridview1.columns.count > 0) { datagridview1.columns.removeat(0); } } private void cleardatagridviewforeach() { foreach (object \_cols in datagridview1.columns) { datagridview1.columns.removeat(0); } foreach (object \_row in datagridview1.rows) { datagridview1.rows.removeat(0); } } </code></pre><p>наконец, вызовите вашу новую функцию cleardatagridviewloopwhile (); или cleardatagridviewforeach (); где вам нужно его использовать, но рекомендуется, когда вы делаете запросы и переключаетесь на несколько таблиц, которые будут загружаться с разными именами заголовков в grieview. но если вы хотите сохранить заголовки, здесь есть решение.</p>

<pre><code>private void cleargrid() { if(this.invokerequired) this.invoke(new action(this.cleargrid)); this.datagridview.datasource = null; this.datagridview.rows.clear(); this.datagridview.refresh(); } </code></pre>

<p>если вы хотите очистить все заголовки, а также данные, например, если вы переключаетесь между 2 совершенно разными базами данных с разными полями, а значит, с разными столбцами и заголовками столбцов, я нашел следующее: в противном случае при переключении столбцы/поля из обеих баз данных отображаются в сетке.</p><pre><code>datatable.dispose();//get rid of existing datatable datatable = new datatable();//create new datatable datagrid.datasource = datatable;//clears out the datagrid with empty datatable //datagrid.refresh(); this does not seem to be neccesary dataadapter.fill(datatable); //assumming you set the adapter with new data datagrid.datasource = datatable; </code></pre>

<pre><code>datagridview1.rows.clear(); datagridview1.refresh(); </code></pre>

<pre><code>datatable.clear(); datagridview1.datasource = datatable; </code></pre>

<p>для того, чтобы иметь сетку данных, у вас должен быть метод, который форматирует вашу сетку данных. если вы хотите очистить datagrid, просто вспомните метод.</p><p>вот мой метод:</p><pre><code> public string[] dgv\_headers = new string[] { "id","hotel", "lunch", "dinner", "excursions", "guide", "bus" }; // this defined at public partial class private void setdgvheader() { dgv.rows.clear(); dgv.columncount = 7; dgv.rowheadersvisible = false; int nbr = int.parse(daysbox.text); // in my method it's the textbox where i keep the number of rows i have to use dgv.rows.add(nbr); for(int i =0; i<nbr;++i) dgv.rows[i].height = 20; for (int i = 0; i < dgv\_headers.length; ++i) { if(i==0) dgv.columns[i].visible = false; // i need an invisible cells if you don't need you can skip it else dgv.columns[i].width = 78; dgv.columns[i].headertext = dgv\_headers[i]; } dgv.height = (nbr* dgv.rows[0].height) + 35; dgv.allowusertoaddrows = false; } </code></pre><p>dgv это имя datagridview</p>

<p>обновить представление данных и обновить данные</p><pre><code>datagridview1.refresh(); datatable.clear(); </code></pre>