web-dev-qa-db-ja.com

データグリッドビューをクリアする方法

ComboBoxで選択した項目に基づいてDataGridViewを作成しようとしていますが、この部分は機能しています。

ただし、最後に追加するだけでなく、新しいアイテムから新しいデータを追加する前に、グリッドをクリアできる必要があります。

アイテムを追加する前にDataGridViewをクリアするにはどうすればよいですか?

36
Wizard

まず、データソースをnullにします。

this.dataGridView.DataSource = null;

次に、行をクリアします。

this.dataGridView.Rows.Clear();

次に、データソースを新しいリストに設定します。

this.dataGridView.DataSource = this.GetNewValues();
75
Trevor Pilley

データソースにバインドされている場合-

dataGridView.DataSource=null;
dataGridView.Rows.Clear();

私のために働いた。

10
Jon649

この方法でDataGridViewをクリアできます

dataGridView1.Rows.Clear();
dataGridView1.Refresh();

databoundの場合、これを試してください

dataGridView1.Rows.Clear() // If dgv is bound to datatable
dataGridView1.DataBind();
7
Priyank Patel

データだけでなく、コンボボックス、チェックボックスもクリアしたい場合は、試してください

dataGridView.Columns.Clear();
5
nate wew
DataGrid.DataSource = null;
DataGrid.DataBind();
5
Pankaj Agarwal

データソースをデータグリッドのnullとして割り当ててから、再バインドできます。

dg.DataSource = null;
dg.DataBind();
3
Rohit Vyas

あなたはこの次の指示を取ることができ、パフォーマンスの欠如で仕事をするでしょう。その効果を確認したい場合は、DataGridViewをtry {} catch(...){}ブロックにクリアする必要がある次の2つの命令(技術的に類似したもの)のいずれかを配置し、最終的にブロックします。

     while (dataGridView1.Rows.Count > 1)
    {
        dataGridView1.Rows.RemoveAt(0);
    }

    foreach (object _Cols in dataGridView1.Columns)
    {
        dataGridView1.Columns.RemoveAt(0);
    }

このタスクは改善されますが、十分ではありません。DataGridViewオブジェクトに残っている列のために、DataGridViewをリセットする問題があります。最後に、自宅での実践で実装した最良の方法は、このgridViewを行と列のあるファイルとして処理することです。行と列の一致に基づくレコードコレクションです。改善できる場合は、a)またはb)を選択してください:foreachまたはwhile。

     //(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);
    }

まあ、あなたの人生では決して列を最初に削除しないことを推奨するように、論理的には列が最初に作成され、次に行が作成されるため、順序は列の後の行の前にあります。

     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);
    }

次に、関数またはメソッド内に配置します。

 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);
    }
}

最後に、新しい関数ClearDataGridViewLoopWhile();を呼び出します。またはClearDataGridViewForEach();それを使用する必要がありますが、クエリを作成し、grieViewに異なるヘッダー名でロードされる複数のテーブルを変更するときに推奨されます。ただし、ここでヘッダーを保持する場合は、解決策があります。

2
OssaRios
private void ClearGrid()
{    
    if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid));

    this.dataGridView.DataSource = null;
    this.dataGridView.Rows.Clear();
    this.dataGridView.Refresh();
}
1
Manish Mistry

すべてのヘッダーとデータをクリアする場合、たとえば、異なるフィールド、したがって異なる列と列ヘッダーを持つ2つのまったく異なるデータベースを切り替える場合、次のように動作することがわかりました。それ以外の場合、切り替えると、両方のデータベースの列/フィールドがグリッドに表示されます。

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; 
1
valhalla
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
1
Asif
datatable.Clear();
dataGridView1.DataSource = datatable;
0
HarshPritesh

Datagridを使用するには、Datagridをフォーマットするメソッドが必要です。 Datagridをクリアする場合は、メソッドを思い出してください。

私の方法は次のとおりです。

    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;
    }

dgvはDataGridViewの名前です

0
Ismail Gunes

データグリッドビューを更新し、データテーブルを更新します

dataGridView1.Refresh();
datatable.Clear();
0
vignesh