43

ComboBoxで選択したアイテムに基づいてDataGridViewにデータを入力しようとしていますが、この部分は機能しています。

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

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

4

17 に答える 17

93

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

this.dataGridView.DataSource = null;

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

this.dataGridView.Rows.Clear();

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

this.dataGridView.DataSource = this.GetNewValues();
于 2012-10-30T11:06:14.223 に答える
13

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

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

私のために働いた。

于 2015-03-26T11:16:57.633 に答える
7

DataGridViewこんな感じで クリアできます

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

もしそうなら、これdataboundを試してください

dataGridView1.Rows.Clear() // If dgv is bound to datatable
dataGridView1.DataBind();
于 2012-10-30T11:04:35.570 に答える
6
DataGrid.DataSource = null;
DataGrid.DataBind();
于 2012-10-30T11:04:30.280 に答える
3

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

dg.DataSource = null;
dg.DataBind();
于 2012-10-30T11:06:47.010 に答える
2

この次の命令を実行しても、パフォーマンスが低下する可能性があります。その効果を確認したい場合は、DataGridView をクリアして try{} catch(...){} finally ブロックにする必要がある次の 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 に異なるヘッダー名でロードされる複数のテーブルを変更する場合に推奨されます。ただし、ここでヘッダーを保持したい場合は、解決策があります。

于 2016-05-01T07:30:59.470 に答える
1

すべてのヘッダーとデータをクリアする場合、たとえば、フィールドが異なる 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; 
于 2014-12-13T14:36:26.607 に答える
1
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
于 2012-10-30T11:04:41.943 に答える
1
private void ClearGrid()
{    
    if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid));

    this.dataGridView.DataSource = null;
    this.dataGridView.Rows.Clear();
    this.dataGridView.Refresh();
}
于 2015-06-24T04:10:56.827 に答える
0

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 の名前です

于 2018-01-13T23:43:49.113 に答える
0

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

dataGridView1.Refresh();
datatable.Clear();
于 2013-10-07T10:44:32.670 に答える
-2

解決策は次のとおりです。

dataGridView1.Rows.RemoveAt(0);

グリッドをクリアし、列を保持します。

于 2015-11-04T21:34:26.913 に答える
-3

これは私に働いています

'int numRows = dgbDatos.Rows.Count;

            for (int i = 0; i < numRows; i++)
            {
                try
                {

                    int max = dgbDatos.Rows.Count - 1;
                    dgbDatos.Rows.Remove(dgbDatos.Rows[max]);
                    btnAgregar.Enabled = true;
                }
                catch (Exception exe)
                {
                    MessageBox.Show("No se puede eliminar " + exe, "",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }`
于 2016-12-19T16:56:58.087 に答える
-6

解決策は次のとおりです。

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

この次の命令を実行しても、パフォーマンスが低下する可能性があります。その効果を確認したい場合は、DataGridView をクリアする必要がある次の命令の 1 つを try{} catch(...){} finally ブロックに入れて、何が起こるかを待ちます。

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

        while (dataGridView1.Columns.Count > 0)
        {
            dataGridView1.Columns.RemoveAt(0);
        }
于 2014-05-02T10:06:42.630 に答える