2017-09-05 1 views
0

VS2015와 C#을 사용하고 있습니다.DataSourceObject를 데이터 소스로 할당하여 동적으로 생성 된 그리드 뷰

내 웹 응용 프로그램에서는 동적으로 GridView를 거의 만들지 않습니다. 런타임에 생성 된 GridView의 수는 데이터에 따라 다릅니다 (따라서 1 또는 2이거나 아니요).

그래서 반복됩니다. 각 격자에 대한 데이터 소스로 DataTable을 반환

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 방법 : 자사 제대로 작동하지 않는 나를 위해

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

내가 좋아하는 각각의 GridView에 데이터 소스로 DataSourceObject을 할당 할. 첫 번째 루프가 완료된 후, 즉 모든 그리드를 생성 한 후에 실행되는 방법. 그래서 마지막으로 메소드 Myrow을 실행하면 null이며 null 예외가 발생합니다.

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

답변

0

그것을 해결 :

추가 selectparameters를 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; 
     }