2017-09-05 1 views
0

J'utilise VS2015 et C#.Affectation de DataSourceObject en tant que source de données à Gridies créées dynamiquement

Dans mon application web, je crée quelques GridViews dynamiquement. Nombre de GridView créés lors de l'exécution dépend des données (peut donc être 1 ou 2 ou non).

Donc c'est en boucle. Je veux assigner DataSourceObject en tant que source de données pour chaque GridView comme:

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

Ma méthode GetTable qui retourne DataTable en tant que source de données pour chaque grille:

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

Pour moi sa ne fonctionne pas correctement. GetTable qui s'exécute après la fin de la première boucle, c'est-à-dire après avoir créé toutes les grilles. Donc, quand il exécute finalement la méthode Myrow est nulle et il donne une exception nulle.

Comment faire bouger les choses il assignera correctement comme:

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

Répondre

0

a résolu le problème :)

Ajouté SelectParameters à ObjectDataSource.

Maintenant c'est de travailler pour moi.

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