2008-12-13 6 views

Répondre

4
protected void ObjectDataSource1_ObjectCreated(object sender, ObjectDataSourceEventArgs e) 
{ 
    if (e.ObjectInstance != null) 
    { 
     SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = MyConnectionManager.ConnectionString; 
     e.ObjectInstance.GetType().GetProperty("Connection").SetValue(e.ObjectInstance, conn, null); 
    } 
} 

J'espère que cela aide.

1

Je n'ai pas ci-dessus pour travailler, mais ce fait:

if (e.ObjectInstance != null) 
    { 
    ((ReportPrototype.ReleasedRatingsDataTableAdapters.RatingsViewTableAdapter)e.ObjectInstance).Connection.ConnectionString = ConfigurationManager.ConnectionStrings["RADSDataConnectionString"].ConnectionString; 
    } 

ObjectInstance est l'adaptateur de table qui dans mon cas était le type lié à la ObjectDataSource.

+0

commentaire tardif: Je suis incapable de faire le travail de réponse acceptée, comme je reçois une référence nulle pour les résultats de ' GetProperty ("Connection") ', mais cette technique fonctionne toujours pour moi dans ASP.NET 4. – jbeldock

0

est ici une approche qui fonctionnera pour tous les adaptateurs de table générés, en utilisant la réflexion:

void OnObjectDataSourceObjectCreated(object sender, ObjectDataSourceEventArgs e) 
{ 
    if (e.ObjectInstance != null) 
    { 
     ((SqlConnection)e.ObjectInstance.GetType() 
      .GetProperty("Connection", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) 
      .GetValue(e.ObjectInstance, null) 
     ).ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    } 
} 

Notez que Microsoft propriété de connexion génère est créé comme interne (sur mon VS 2013), vous devez donc donner BindingFlags .NonPublic à GetProperty.

Et bien sûr, câbler l'événement ObjectCreated d'une façon ou d'une autre:

ObjectDataSource ObjectDataSource1 = new ObjectDataSource(); 
... 
ObjectDataSource1.ObjectCreated += OnObjectDataSourceObjectCreated; 
Questions connexes