2010-06-19 13 views
2

J'ai une configuration ListView avec LinqDataSource et un bouton qui déclenche la fonction de recherche. Pour éviter l'affichage des données sur page_load, je définis DataSourceID de ListView dans l'événement Click du bouton de recherche, le lie et définit les données de résultat dans l'événement Selecting de LinqDataSource. Cela fonctionne comme je m'y attendais, mais il ne semble pas intéressant de définir DataSourceId dans l'événement Click du bouton chaque fois que le bouton de recherche est cliqué. Comment puis-je faire cela de manière plus claire et plus claire?Sur ListView ASP.NET avec LinqDataSource, affichez les données lorsque le bouton de recherche a cliqué

Code ASPX:

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="WebApplication1.DataClasses1DataContext" EntityTypeName="" 
    TableName="Persons" onselecting="LinqDataSource1_Selecting"> 
</asp:LinqDataSource> 

<asp:ListView ID="ListView1" runat="server" >...</asp:ListView> 

<asp:Button ID="Search" Text="Search" runat="server" Click="Search_Clicked"/> 

Code aspx.cs:

protected void Search_Clicked(object sender, EventArgs e) 
{ 
    ListView1.DataSourceID = LinqDataSource1.ID; 
    ListView1.DataBind(); 
} 

protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    //Search Criteria from CheckBoxList and TextBox applied here. 
    DataClasses1DataContext data = new DataClasses1DataContext(); 
    var query = from result in data.Persons 
       where result.ID > 2 
       select result; 
    e.Result = query; 
} 

Répondre

0

Honnêtement, je ne vois rien de mal à votre approche, cependant, si vous ne l'aimez pas, un autre approche serait de simplement définir statiquement le DataSourceID dans votre balisage ListView comme d'habitude, mais réglez Visible="False", et ne le rendre visible qu'une fois le bouton a été cliqué.

+0

Merci pour votre réponse, womp. J'y pensais aussi mais le problème c'est que quand il se lie, il récupère toujours les données de DB sur le chargement de la page sans aucun critère de recherche. Je me demandais simplement s'il y avait un moyen de lier la source de données à listview et de ne pas récupérer les données avant de le lui dire explicitement. –