2009-11-11 5 views
0

Dans une page ASPX, j'ai 7 commandes utilisateur chargées. Dans chaque contrôle utilisateur, il y a des contrôles liés aux données (gridview par exemple).Datable dans ASPX utilisé comme DataSource pour plusieurs contrôles utilisateur

Actuellement, chaque contrôle utilisateur exécute une requête pour renvoyer des données. Les données retournées sont les mêmes pour chaque contrôle utilisateur, et je filtre ce que j'ai besoin de montrer pour chaque contrôle utilisateur. Donc, la même requête est exécutée 7 fois (Ouais je sais). Ce que je voudrais faire est d'avoir la datatable créée dans la page ASPX, puis autoriser chaque utilisation de gridview qui peut être datée comme DataSource pour que la requête ne soit exécutée qu'une seule fois.

J'apprécierais toute aide avec ceci.

Répondre

1

Peut-être que vous pouvez exposer une propriété à vos paramètres usercontrols qui obtient le datatable. Sur votre page qui inclut les contrôles utilisateur, définit la propriété.

1

Vous pouvez définir une propriété publique sur chaque contrôle (par exemple une liste) et exécutez la requête dans la page ASPX et passez aux commandes

0

Seven GridViews est surpuissant et entravera sérieusement les performances de la page . Saisissez les données une fois dans votre page principale. Vous pouvez ensuite définir les propriétés sur les contrôles utilisateur et les afficher sous forme de tableau dans chaque contrôle utilisateur.

0

Je pense que l'approche que vous envisagez vous fera beaucoup de travail supplémentaire. Mieux vous cachez la datatable, et avant que chaque contrôle utilisateur n'exécute la requête, vous vérifiez d'abord le cache. Dans le cas où vous obtenez la datatable du cache, vous pouvez l'utiliser pour effectuer des actions. Sinon, vous exécutez la requête et obtenez la datatable de la base de données. De cette façon, la chose existante fonctionnera et vous obtiendrez le résultat souhaité avec un minimum d'effort.

0

Si vos contrôles utilisateur exposent une propriété qui permettra au DataTable à attribuer à ce que vous devriez être en mesure de fournir la fonctionnalité en faisant fonctionner une fois la requête:

// In your ASPX page 
DataTable dt = new DataTable() 
... // populate the table from the database 

userControl1.Source = dt; 
userControl2.Source = dt; 
... 
userControl7.Source = dt; 

// In your user controls 
// Assumes a GridView called myGridView 
public DataTable Source 
{ 
    set 
    { 
     myGridView.DataSource = value; //or hold it somewhere else 
    } 
} 

Ce n'est pas le code le plus efficace tout le temps, mais de cette façon vous n'exécuterez la requête qu'une seule fois.

Questions connexes