2009-09-23 4 views

Répondre

0

valeurs de grille être stocké dans ViewState automatiquement. Vous ne devriez pas avoir besoin de relier chaque postback sauf si vous changez les données. Si vous disposez d'un jeu de données pour lequel vous récupérez des "vues" différentes à chaque fois, comme la pagination ou le tri personnalisé, vous devriez alors évaluer en utilisant le cache pour stocker votre jeu de données.

+0

Oui. Si vous vous connectez à l'événement DataBind, vous remarquerez qu'il ne se déclenche pas à la publication avec ViewState activé à moins qu'une action qui invaliderait les valeurs mises en cache se produise. Le GridView est généralement assez intelligent pour savoir quand quelque chose qui rendrait la copie en cache invalide se produit. Particulièrement lorsqu'il est utilisé avec des sources de données officielles, comme ObjectDataSource et des amis. –

0

Si viewstate est activé, vous n'avez pas besoin de redéfinir.

Si quelque chose est en train de changer et que vous avez besoin de relier vous avez quelques options. Stockez votre source de données dans le viewstate ou la session. Ensuite, vous n'avez pas besoin de cliquer sur la base de données à chaque fois que vous avez besoin d'ajouter un filtre ou de paginer.

Par exemple.

// Load up date initially 
public void LoadYourData() 
{ 
    // This gets your data however you are doing it, in this example I am returning 
    // a list of objects. 
    List<YourObjects> yourData = GetYourData(); 

    // You then have the option to save it in the session or viewstate, I will 
    // demonstrate both. Make sure if you are using viewstate that your objects are 
    // serializable. You should probably also create helper classes to deal with 
    // getting and setting data from the ViewState object or Session. 
    Session["YourData"] = yourData; 
    ViewState["YourData"] = yourData; 
} 

// Then make a bind function that gets the data out of whatever store you have it in 
public void BindYourGrid() 
{ 
    // I will assume you used session 
    grdYourGrid.DataSource = (List<YourObjects>)(Session["YourData"]); 
    grdYourGrid.DataBind(); 
} 

Alors, quand vous devez l'utiliser dans votre Page_Load vous pouvez simplement utiliser les éléments suivants:

GetYourData(); 
BindYourGrid(); 

Si vous avez besoin d'appliquer quelque chose d'un filtre, vous avez juste besoin de tirer les données de votre magasin (session ou viewstate) et effectuez votre manipulation et rangez-la à nouveau. Alors appelez simplement BindYourGrid();.

De cette façon, vous ne frappez jamais la base de données, sauf si vous en avez besoin. Il existe également d'autres méthodes pour mettre en cache les données de votre source de données et elles ont toutes des avantages et des inconvénients. Aller avec tout ce qui fonctionne dans votre cas, car j'ai seulement montré deux méthodes.

Questions connexes