web-dev-qa-db-fra.com

Comment clair GridView dans asp.net?

Je fais une page Web dans asp.net et dans un module ont sélectionné une archive Excel avec FileUpLoad et cliquez sur un bouton d'importation. Jusque là je vais bien. Mais dans le moment que je veux, sélectionnez une autre archive Excel et cliquez sur le bouton Importer, n'effacez pas la variable GridView et n'indiquez pas d'erreur. Je tente avec ceci parce que je vois dans d'autres questions semblables à ceci.

Avec cela je charge la grille

Conn = string.Format(Conn, DireccionArchivo, MostrarHDR);
OleDbConnection ConnExcel = new OleDbConnection(Conn);
OleDbCommand CmdExcel = new OleDbCommand();
OleDbDataAdapter Oda = new OleDbDataAdapter();
DataTable Dt = new DataTable();
CmdExcel.Connection = ConnExcel;

ConnExcel.Open();
CmdExcel.CommandText = "SELECT * From ["Page1$"]";
Oda.SelectCommand = CmdExcel;
Oda.Fill(Dt);
ConnExcel.Close();

grdResultados.Caption =  Path.GetFileName(DireccionArchivo);
grdResultados.DataSource = Dt;
grdResultados.DataBind();

Et avec cela, je veux effacer la GridView et le dernier y appelé de nouveau la méthode de chargement de la GridView

DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();

L'erreur que me montre est dans la grdResultados.DataBind(); lorsqu'elle est appelée pour la deuxième fois.

6
Fernando Zaiza

J'ai résolu le problème, au moment où effacer le GridView avec

DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();

cela efface le GridView mais ne supprime pas les noms des colonnes, et c’est l’erreur, il faut également nettoyer les noms des colonnes. Pour supprimer les colonnes:

for (int i = 0; grdResultados.Columns.Count > i; )
{
    grdResultados.Columns.RemoveAt(i);
}

et dans la méthode de chargement, GridView doit générer les colonnes automatiquement avec cette propriété:

grdResultados.AutoGenerateColumns = true;

Je laisse cela au cas où quelqu'un aurait le même problème

9
Fernando Zaiza

Il suffit d'utiliser la valeur null:

grdResultados.DataSource = null;
grdResultados.DataBind();
28
Ali Shahrokhi

essaye ça

grdResultados.DataSource = null;

ou

grdResultados.Rows.Clear();

puis relier le gridview

2
faby
int gvHasRows = grdResultados.Rows.Count;
if (gvHasRows > 0)
{
    grdResultados.Columns.Clear();
    grdResultados.DataBind();
}

Commencez par vérifier que Gridview contient des données avant d'essayer d'effacer . Les lignes n'ont pas de fonction Effacer.

2
LokizFenrir

Si vous utilisez une session, effacez la session Exemple:

DataTable ds = new DataTable();
ds = null;
GV.DataSource = ds;
GV.DataBind();

for (int i = 0; GV.Columns.Count > i; )
{
    GV.Columns.RemoveAt(i);
}

ViewState["CurrentData"] = null;
1
Carlos Acosta

Créez une table de données vide avec uniquement vos noms de colonne et reliez-la 

0
Rex

Vous pouvez simplement faire ceci:

GridView1.SelectedIndex = -1;
0
Ashandra Singh