web-dev-qa-db-ja.com

GridView.DataSourceをデータテーブルまたはデータセットにエクスポートするにはどうすればよいですか?

エクスポートする方法GridView.DataSourceデータテーブルまたはデータセットへ?

39
Penguen

最初にDataSourceBindingSourceを変換する必要があります。例を見てください

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

tCxCのデータを使用すると、何でもできます。

DataSourceのタイプがDataTableであると仮定すると、これを行うことができます。

myGridView.DataSource as DataTable
48
Kon

個人的に私は行くだろう:

DataTable tbl = Gridview1.DataSource as DataTable;

これにより、DataTableオブジェクトまたはnullのいずれかになるため、nullをテストできます。 (DataTable)Gridview1.DataSourceを使用してDataTableとしてキャストすると、DataSourceが実際にDataSetまたは何らかのコレクションである場合、クラッシュエラーが発生します。

サポートドキュメント: "as"に関するMSDNドキュメント

19
Tacoman667

アンブ、

私はあなたと同じ問題を抱えていました、そして、これは私がそれを理解するのに使用したコードです。フッター行セクションは目的に使用していませんが、このコードに含めました。

    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

以下でgridview.bind()を実行する場合:

if(!IsPostBack)

{

//your gridview bind code here...

}

次に、関数でDataTable dt = Gridview1.DataSource as DataTable;を使用して、データテーブルを取得できます。

しかし、ボタンをクリックしてMicrosoftドキュメントに記録すると、データテーブルをgridviewにバインドします。

HTTPはステートレスプロトコルです。これは、Webサーバーがページの各HTTP要求を独立した要求として扱うことを意味します。サーバーは、以前の要求で使用された変数値の知識を保持しません。

同じ条件がある場合、Sessionを使用して値を保持することをお勧めします。

Session["oldData"]=Gridview1.DataSource;

その後、ページが再びポストバックするときに値を思い出すことができます。

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

参照: 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
劉鎮瑲

私は以下のコード行を使用しましたが、動作します、これを試してください

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