Come posso esportare un object GridView.DataSource in un datatable o dataset?

Come posso esportare GridView.DataSource su datatable o dataset?

Dovresti convertire prima DataSource in BindingSource , guarda l’esempio

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

Con i dati di tCxC puoi fare qualsiasi cosa.

Supponendo che il tuo DataSource sia di tipo DataTable, puoi fare questo:

 myGridView.DataSource as DataTable 

Personalmente vorrei andare con:

 DataTable tbl = Gridview1.DataSource as DataTable; 

Ciò consentirebbe di verificare null come risultato in un object DataTable o null. Lanciarlo come DataTable usando (DataTable) Gridview1.DataSource causerebbe un errore irreversibile nel caso in cui DataSource fosse in realtà un DataSet o addirittura una sorta di raccolta.

Documentazione di supporto: documentazione MSDN su “come”

Ambu,

Stavo avendo lo stesso problema di te, e questo è il codice che ho usato per capirlo. Sebbene io non utilizzi la sezione della riga del footer per i miei scopi, l’ho inclusa in questo codice.

  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(" ",""); } 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(" ",""); } dt.Rows.Add(dr); } 

Ho usato sotto la riga di codice e funziona, prova questo

 DataTable dt = dataSource.Tables[0]; 

Se si esegue gridview.bind() su:

 if(!IsPostBack) { //your gridview bind code here... } 

Quindi è ansible utilizzare DataTable dt = Gridview1.DataSource as DataTable; in funzione per recuperare datatable.

Ma lego il databile a gridview quando faccio clic sul pulsante e registro su un documento Microsoft:

HTTP è un protocollo stateless. Ciò significa che un server Web considera ogni richiesta HTTP per una pagina come una richiesta indipendente. Il server non conserva alcuna conoscenza dei valori delle variabili che sono stati utilizzati durante le richieste precedenti.

Se hai la stessa condizione, ti consiglierò di usare Session per mantenere il valore.

 Session["oldData"]=Gridview1.DataSource; 

Successivamente è ansible richiamare il valore quando il postback della pagina è di nuovo disponibile.

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

Riferimenti: https://msdn.microsoft.com/en-us/library/ms178581(v=vs.110).aspx#Anchor_0

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

Questo arriva tardi ma è stato abbastanza utile. Sto solo postando per riferimento futuro

 DataTable dt = new DataTable(); Data.DataView dv = default(Data.DataView); dv = (Data.DataView)ds.Select(DataSourceSelectArguments.Empty); dt = dv.ToTable();