【问题标题】:Assign DataSourceObject as datasource to Dynamically created gridviews将 DataSourceObject 作为数据源分配给动态创建的网格视图
【发布时间】:2018-02-13 06:45:58
【问题描述】:

我正在使用 VS2015 和 C#。

在我的网络应用程序中,我动态创建了几个 GridView。在运行时创建的 GridView 的数量取决于数据(因此可以是 1 或 2 或任何否)。

所以它在循环中。我想将DataSourceObject 作为数据源分配给每个 GridView,例如:

i=1;

DataRow Myrow;

foreach (DataRow row in dtSection.Rows)
{
    Myrow = row;

    GridView grid = new GridView();

    grid.id = "grid" + i;

    grid.datasource = "data" + i;

    ObjectDataSource dataSource = new ObjectDataSource();
    dataSource.ID = "data" + i;
    dataSource.SelectMethod = "GetTable";
    dataSource.TypeName = "MyNameSpace.MyClass";

    i = i + 1;
}

我的 GetTable 方法返回 DataTable 作为每个网格的数据源:

public DataTable GetTable()
{
    DataTable dtpage = new DataTable();
    dtpage = ReportDataTable.Clone();  // My another data table from which I am selecting few rows
    DataRow[] rowArray = ReportDataTable.Select("title = '" + Myrow[0].ToString() + "'");

    foreach (DataRow row1 in rowArray)
    {
        dtpage.ImportRow(row1);
    }

    return dtpage;
}

对我来说,它无法正常工作。 GetTable 方法在第一个循环完成后执行,即在创建所有网格之后。所以当它最终执行方法时Myrow为null,它给出了null异常。

如何做到这一点,以便正确分配:

grid1.datasource = data1,  grid2.datasource = data2 .... etc

【问题讨论】:

    标签: asp.net gridview dynamic


    【解决方案1】:

    解决了:)

    为 ObjectDataSource 添加了选择参数。

    现在它对我有用。

    foreach (DataRow row in dtSection.Rows)
    {
        Myrow = row;
    
        GridView grid = new GridView();
    
        grid.id = "grid" + i;
    
        grid.datasourceid = "data" + i;
    
                ObjectDataSource dataSource = new ObjectDataSource();
    
                Parameter pm = new Parameter();
                pm.Type = TypeCode.String;
                pm.Name = "title";
                pm.DefaultValue = row[0].ToString();
    
                dataSource.ID = "data" + i;
                dataSource.SelectMethod = "GetTable";           
                dataSource.SelectParameters.Clear();
                dataSource.SelectParameters.Add(pm);
                dataSource.TypeName = "InternalAuditInspection.ManageGraphReport";
                dataSource.Select();
                dataSource.DataBind();
    
    i = i+1;
    
    }
            public DataTable GetTable(String title)
            {
                DataTable dtpage = new DataTable();
                dtpage = ReportDataTable.Clone();
                DataRow[] rowArray = ReportDataTable.Select("title ='"+ title + "'");
    
                foreach (DataRow row1 in rowArray)
                {
                    dtpage.ImportRow(row1);
                }
    
                return dtpage;
            }
    

    【讨论】:

      猜你喜欢
      • 2014-06-30
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多