2010-03-11 3 views
1

J'ai 2 DropDownList sur mes Form et 1 GridView. Je veux le GridView pour afficher les données selon la sélection du DropDownList s.Rendre GridView répondre à 2 listes déroulantes

Par exemple, un DropDownList contient des noms et un autre contient des dates. Les deux DropDownList peuvent être affichés. Donc, si je choisis un nom du 1er DropDownList, le GridView devrait montrer tous les résultats selon ce nom. De même, si je sélectionne le Date de l'autre DropDownList, le GridView devrait montrer les résultats selon les dates. Mais je ne peux pas comprendre comment lier GridView pour répondre à 2 DropDownList. BTW Je lie à la fois les listes déroulantes et la vue Grid aux objets DataSource, qui obtiennent des données de la base de données.

Toutes suggestions?

Répondre

0

Il est préférable et plus propre si vous utilisez deux DataSource avec la sélection des données de DB et la liaison de chacun d'entre eux à DropDownList. J'ai essayé dans mon application ASP.NET faire ce que vous voulez, mais unfortunatelly je erorrs:/

Mon seul sollution est de ne pas utiliser DataSouce dans le fichier ASPX, mais utiliser dans DropDownList cas SelectedItemDataContext et il est possible que vous pourrait lier les deux à la même DataView comme ci-dessous. Je ne sais pas, mais peut-être que vous devez utiliser null dans DataSource pour réinitialiser GridView avant d'utiliser une nouvelle source de données:

protected void btPokaz_Click(object sender, EventArgs e) 
{ 
    DataClassesDataContext db = new DataClassesDataContext(); 
    var DzieciGrupa = from p in db.Dzieckos 
       where p.Grupy.Numer == Convert.ToInt32(this.dropListGrupy.SelectedValue) 
       orderby p.Nazwisko 
       select new { p.Imie, p.Nazwisko }; 
    if (DzieciGrupa.Count() == 0) this.Label1.Text = "W " + this.dropListGrupy.SelectedValue.ToString() + " grupie nie ma dzieci zapisanych!"; 
    this.GridGrupy.DataSource = null; 
    this.GridGrupy.DataSource = DzieciGrupa; 
    // this.GridView1.DataSourceID = String.Empty; 
    this.GridGrupy.DataBind(); 

Essayez et dites à dire qui fonctionne;)

+0

J'utilise 2 différentes sources de données pour mon DDL et les deux sont également DDLs autopostback. Pouvez-vous s'il vous plaît expliquer votre code un peu. – raziiq

+0

Dans mon code, je n'utilise pas DataSource créant dans la classe aspx. Dans le projet, je crée une classe Entity Data Model. Lors de la création de cette classe, vous voyez un assistant qui vous aide à sélectionner votre DataSource. La classe EDM est un modèle d'objet de la source de données que j'utilise (j'utilise la base de données SQL SERVER, mais vous pouvez utiliser un objet, une base de données etc. comme source de données). Ensuite, vous utilisez une DataClass qui hérite de DataContext. DataContext est le modèle de vos données source. Ensuite, j'utilise Linq to SQL pour interroger les données dont j'ai besoin. À la fin, je "réinitialiser" la source GridView et définir mes données de requête en tant que source de grille et le lier;) – netmajor

0

Pour votre problème, vous devez créer dwo EDM classe pour chaque source de données. Et simple dans l'événement de sélection DDL Votre choix de DataContext dépend de l'utilisateur choisir en DDL.

Exemple:

protected void DDL_SelectedItem(object sender, EventArgs e) 
{ 
    TypeOfQueryData query = null;//you must know what type is data You query 
    if(this.dropListGrupy.SelectedValue==someItemSelect) 
    { 
    DataClasses1DataContext db = new DataClasses1DataContext(); 
    //query to get data from source 
    query= from p in db.Dzieckos 
       where p.Grupy.Numer == Convert.ToInt32(this.dropListGrupy.SelectedValue) 
       orderby p.Nazwisko 
       select new { p.Imie, p.Nazwisko }; 
    } 
    if(this.dropListGrupy.SelectedValue==otherItemSelect) 
    { 
    DataClasses2DataContext db = new DataClasses2DataContext(); 
    query= from p in db.Dzieckos 
       where p.Grupy.Numer == Convert.ToInt32(this.dropListGrupy.SelectedValue) 
       orderby p.Nazwisko 
       select new { p.Imie, p.Nazwisko }; 
    } 
    this.GridGrupy.DataSource = null; 
    this.GridGrupy.DataSource = DzieciGrupa; 
// this.GridView1.DataSourceID = String.Empty;//maybe You need do that 
    this.GridGrupy.DataBind(); 
+0

hey;) Est-ce que ma réponse vous aide? – netmajor

Questions connexes