web-dev-qa-db-fra.com

Comment effacer une vue de la grille de données

J'essaie de renseigner un DataGridView en fonction de l'élément sélectionné dans une liste déroulante. Cette partie fonctionne.

Cependant, je dois pouvoir effacer la grille avant d'ajouter les nouvelles données d'un nouvel élément plutôt que de simplement les ajouter à la fin. 

Comment effacer un DataGridView avant de lui ajouter des éléments?

36
Wizard

Tout d'abord, annulez la source de données:

this.dataGridView.DataSource = null;

Puis effacez les lignes:

this.dataGridView.Rows.Clear();

Définissez ensuite la source de données sur la nouvelle liste:

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

Si c'est lié à une source de données -

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

Travaillé pour moi.

10
Jon649

Vous pouvez effacer DataGridView de cette manière 

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

Si c'est databound alors essayez ceci

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

SI vous souhaitez effacer non seulement les données, mais également les listes déroulantes, les cases à cocher, essayez

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

Vous pouvez affecter la source de données à la valeur NULL de votre grille de données, puis la lier à nouveau.

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

Vous pourriez prendre cette instruction suivante et faire le travail avec un manque de performance. Si vous voulez voir l'effet de cela, mettez l'une des 2 instructions suivantes (Techniquement similaires) où vous devez effacer le DataGridView dans un bloc {} catch (...) {} et attendez ce qui se produit.

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

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

Vous améliorez cette tâche mais cela ne suffit pas, il y a un problème pour réinitialiser un DataGridView, à cause des colonnes restant dans l'objet DataGridView. Enfin, je suggère que la meilleure façon de mettre en œuvre ma pratique personnelle consiste à traiter ce gridView comme un fichier avec des lignes, des colonnes: une collection d'enregistrements basée sur la correspondance entre les lignes et les colonnes. Si vous pouvez vous améliorer, alors choisissez vous-même a) ou b): pour chaque moment.

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

Bien, comme une recommandation Jamais de votre vie supprimer les colonnes en premier, l'ordre est avant les lignes après les colonnes, parce que logiquement les colonnes ont été créées en premier et ensuite les lignes.Il serait une pénalité en termes d'analyse correcte.

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

Ensuite, placez-le dans une fonction ou une méthode.

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

Enfin, appelez votre nouvelle fonction ClearDataGridViewLoopWhile (); ou ClearDataGridViewForEach (); où vous devez l’utiliser, mais cela est recommandé lorsque vous effectuez des requêtes et que vous modifiez plusieurs tables qui se chargeront avec différents noms d’en-tête dans grieView. Mais si vous voulez conserver les en-têtes ici, une solution est proposée.

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

Si vous souhaitez effacer tous les en-têtes ainsi que les données, par exemple si vous basculez entre 2 bases de données totalement différentes avec des champs différents, donc des colonnes et des en-têtes de colonne différents, les éléments suivants ont fonctionné. Sinon, lorsque vous basculez, les colonnes/champs des deux bases de données apparaissent dans la grille.

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

Pour avoir une grille de données, vous devez avoir une méthode qui formate votre grille de données. Si vous voulez effacer la grille de données, rappelez simplement la méthode.

Voici ma méthode:

    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 est le nom de DataGridView

0
Ismail Gunes

actualise le datagridview et actualise le datatable

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