web-dev-qa-db-fra.com

Comment puis-je exporter un GridView.DataSource vers un ensemble de données ou de données?

Comment puis-je exporter GridView.DataSource vers datatable ou dataset?

39
Penguen

Vous devriez d'abord convertir DataSource en BindingSource, regardez exemple

BindingSource bs = (BindingSource)dgrid.DataSource; // Se convierte el DataSource 
DataTable tCxC = (DataTable) bs.DataSource;

Avec les données de tCxC, vous pouvez tout faire.

28

En supposant que votre source de données soit de type DataTable, vous pouvez simplement faire ceci:

myGridView.DataSource as DataTable
48
Kon

Personnellement j'irais avec:

DataTable tbl = Gridview1.DataSource as DataTable;

Cela vous permettrait de tester la valeur null car cela entraîne l'objet DataTable ou la valeur null. Le convertir en DataTable à l'aide de (DataTable) Gridview1.DataSource provoquerait une erreur qui planterait si DataSource était en fait un DataSet ou même une sorte de collection.

Documentation de support: Documentation MSDN sur "en tant que)

19
Tacoman667

Ambu,

J'avais le même problème que vous et c'est le code que j'ai utilisé pour le résoudre. Bien que je n’utilise pas la section de la ligne de bas de page pour mes besoins, je l’ai incluse dans ce code.

    DataTable dt = new DataTable();

    // add the columns to the datatable            
    if (GridView1.HeaderRow != null)
    {

        for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
        {
            dt.Columns.Add(GridView1.HeaderRow.Cells[i].Text);
        }
    }

    //  add each of the data rows to the table
    foreach (GridViewRow row in GridView1.Rows)
    {
        DataRow dr;
        dr = dt.NewRow();

        for (int i = 0; i < row.Cells.Count; i++)
        {
            dr[i] = row.Cells[i].Text.Replace("&nbsp;","");
        }
        dt.Rows.Add(dr);
    }

    //  add the footer row to the table
    if (GridView1.FooterRow != null)
    {
        DataRow dr;
        dr = dt.NewRow();

        for (int i = 0; i < GridView1.FooterRow.Cells.Count; i++)
        {
            dr[i] = GridView1.FooterRow.Cells[i].Text.Replace("&nbsp;","");
        }
        dt.Rows.Add(dr);
    }
8
Joseph

Si vous faites gridview.bind() à:

if(!IsPostBack)

{

//your gridview bind code here...

}

Ensuite, vous pouvez utiliser DataTable dt = Gridview1.DataSource as DataTable; en fonction de récupérer des données.

Mais je lie le datatable à gridview quand je clique sur le bouton, et l’enregistrement dans le document Microsoft:

HTTP est un protocole sans état. Cela signifie qu'un serveur Web traite chaque requête HTTP d'une page comme une requête indépendante. Le serveur ne conserve aucune connaissance des valeurs de variable utilisées lors des requêtes précédentes.

Si vous avez la même condition, je vous recommanderai alors d'utiliser Session pour conserver la valeur.

Session["oldData"]=Gridview1.DataSource;

Ensuite, vous pouvez rappeler la valeur lors de la publication ultérieure de la page.

DataTable dt=(DataTable)Session["oldData"];

Références: https://msdn.Microsoft.com/en-us/library/ms178581 (v = vs.110) .aspx # Anchor_

https://www.c-sharpcorner.com/UploadFile/225740/introduction-of-session-in-Asp-Net/

2
劉鎮瑲

J'ai utilisé la ligne de code ci-dessous et cela fonctionne, essayez ceci

DataTable dt =  dataSource.Tables[0];
1
RSB