2017-09-05 13 views
0

私はVS2015とC#を使用しています。データソースとしてDataSourceObjectを割り当て、動的に作成されたグリッドビュー

私のWebアプリケーションでは、GridViewを動的に作成していません。実行時に作成されるGridViewの数はデータに依存します(1または2、または任意の数にすることができます)。

だから、それはループしている。そのが正常に動作していない私にとって

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

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

各グリッドのデータソースとしてのDataTableを返すマイGetTable方法:私は次のようにそれぞれのGridViewにデータソースとしてDataSourceObjectを割り当てます。第1のループが完了した後、すなわちすべてのグリッドを作成した後に、メソッドが実行される。したがって、最終的にメソッドMyrowが実行されると、null例外が発生します。それは次のように正しく割り当てる実現するためにどのよう

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

答えて

0

は、それを解決:)

は、ObjectDataSourceのにselectparametersを追加しました。

今、私のために働いています。

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