¿Cómo puedo exportar un GridView.DataSource a una datatable o dataset?

¿Cómo puedo exportar GridView.DataSource a datatable o dataset?

Debes convertir el primer DataSource en BindingSource , mira el ejemplo

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

Con los datos de tCxC puede hacer cualquier cosa.

Suponiendo que su DataSource es de tipo DataTable, puede hacer esto:

 myGridView.DataSource as DataTable 

Personalmente iría con:

 DataTable tbl = Gridview1.DataSource as DataTable; 

Esto le permitiría probar nulo ya que esto da como resultado un objeto DataTable o nulo. Lanzarlo como un DataTable utilizando (DataTable) Gridview1.DataSource causaría un error de locking en caso de que el DataSource sea realmente un DataSet o incluso algún tipo de colección.

Documentación de respaldo: Documentación de MSDN en “como”

Ambu,

Estaba teniendo el mismo problema que tú, y este es el código que utilicé para resolverlo. Aunque, no uso la sección de la fila de pie de página para mis propósitos, sí la incluí en este código.

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

He usado la siguiente línea de código y funciona, prueba esto

 DataTable dt = dataSource.Tables[0]; 

Si haces gridview.bind() en:

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

Luego puede usar DataTable dt = Gridview1.DataSource as DataTable; en función para recuperar datatable.

Pero ato la tabla de datos a la vista de cuadrícula cuando hago clic en el botón y grabo en un documento de Microsoft:

HTTP es un protocolo sin estado. Esto significa que un servidor web trata cada solicitud HTTP de una página como una solicitud independiente. El servidor no tiene conocimiento de los valores variables que se usaron durante las solicitudes anteriores.

Si tiene la misma condición, le recomendaré que use Session para mantener el valor.

 Session["oldData"]=Gridview1.DataSource; 

Después de eso, puede recuperar el valor cuando vuelva a publicar la página.

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

Referencias: 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/

Esto llega tarde, pero fue bastante útil. Solo estoy publicando para futuras referencias

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