3

我正在使用带有 sqldatasource 的 gridview。如何将代码隐藏中的数据源作为数据表取回?

4

3 回答 3

4

使用 System.Data.DataTable dt = (System.Data.DataTable)gview.DataSource; 如果要绑定 DataTable。

如果将 DataSet 绑定为 System.Data.DataTable dt2 = (System.Data.DataTable)((System.Data.DataSet)gvValidDA.DataSource).Tables[0]; 甚至可以从 DataSet 中提取 DataTable 您必须根据需要检查表或表名的索引。

快乐编码。

于 2010-01-06T12:27:57.260 回答
3

已编辑

使用SqlDataSource.Select方法并将其分配给数据视图

DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);

然后使用提取数据表

DataTable dt =  (DataTable)dv.ToTable();
于 2010-01-06T12:08:29.227 回答
1

与上述答案相关,实际数据未存储在 Gridview 属性中。

使用直接转换为 Gridview.DataSource 是不够的,因为当 gridview 渲染时它实际上是 NULL !

您必须直接从 SQL 数据源重新加载数据...

        DataSourceSelectArguments dss = new DataSourceSelectArguments();
        DataView dvS = sdsADDorREMstudentData.Select(dss) as DataView;
        DataTable dtS = dvS.ToTable() as DataTable;
        if (dtS != null)
        {
          ... etc...
        }

或者您可以使用 ViewState 在 Gridview 呈现之前保留数据。

    DataView dvClasses = (DataView)sdsClasses.Select(DataSourceSelectArguments.Empty);

    gvStudents.DataSourceID = "sdsClasses";
    gvStudents.DataSource = null; // Null out the source, as we have a SourceID instead
    gvStudents.DataBind();

    //save the data in a viewstate for later use (to control adding and removing students, without doing a postback! See ADD & REM methods below)
    DataView dv = (DataView)dvClasses;
    DataTable dt = new DataTable();
    if (dv != null)
    {
        dt = dv.ToTable();
        ViewState["gv"] = dt;
    }

并使用 ViewState 将其转回 DataTable,当您需要在 Gridview 呈现后使用数据时......

DataTable dt = (DataTable)ViewState["gv"];
于 2017-03-22T01:55:32.173 回答