Bonjour à tous,
Je programme une application en 3 couches (données, métier, interface). Dans mon interface, j'inclue un formulaire qui contient 2 DataGridView. Ceux-ci sont connecté à un DataSet. J'ai remonté depuis la couche données 2 DataView: SOUSQUESTION et REPONSE. SOUSQUESTION est lié au DataGridView1 et REPONSE au DataGridView2.
Mais voilà mon problème. Je souhaite utiliser un filtre (propriété RowFilter sans doute) pour qu'à chaque fois qu'on clique sur une question du DataGridView1, il soit affiché les réponses associées à celle-ci dans le DataGridView2... Je pense qu'il faut utiliser l'ID de mon DataView SOUSQUESTION, mais je ne sais pas comment m'y prendre et quelle est la syntaxe pour utiliser une clé primaire d'une table comme filtre...
Couche données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; namespace T3_DAL_IDEC { public partial class DAL_Services : Component { public DAL_Services() { InitializeComponent(); } public DAL_Services(IContainer container) { container.Add(this); InitializeComponent(); } #region METHODES public DataView ChargerTableQUESTION() { this.tbaQUESTION.Fill(this.dstCerPro.QUESTION); //chargement de la table QUESITON return this.dstCerPro.QUESTION.DefaultView; //retourne la vue chargée } public DataView ChargerTableSOUSQUESTION() { this.tbaSOUSQUESTION.Fill(this.dstCerPro.SOUSQUESTION); return this.dstCerPro.SOUSQUESTION.DefaultView; } public DataView ChargerTableREPONSE() { this.tbaREPONSE.Fill(this.dstCerPro.REPONSE); return this.dstCerPro.REPONSE.DefaultView; } #endregion } }
Couche métier
Couche interface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using T3_DAL_IDEC; namespace T2_BLL_IDEC { public class BLL_Questionnaire { #region CHAMPS //Champ d'instance pour DAL_Services private DAL_Services DAL = null; //Champ vue de données private DataView dtvQUESTION = null; private DataView dtvSOUSQUESTION = null; private DataView dtvREPONSE = null; #endregion #region PROPRIETES //Mise à disposition de la vue public DataView VueQUESTION { get { return this.dtvQUESTION; //retourne la valeur du champ privé, à la lecture de la propriété } } public DataView VueSOUSQUESTION { get { return this.dtvSOUSQUESTION; } } public DataView VueREPONSE { get { return this.dtvREPONSE; } } #endregion public BLL_Questionnaire() { this.DAL = new DAL_Services(); } #region METHODES //méthode permettant l'affectation de la vue par defaut de la table public void ChargerVueQUESTION() { //appel de la fonction de chargement de la table QUESTION dans DAL this.dtvQUESTION = this.DAL.ChargerTableQUESTION(); //et affectation de sa vue par défaut au champ privé } public void ChargerVueSOUSQUESTION() { this.dtvSOUSQUESTION = this.DAL.ChargerTableSOUSQUESTION(); } public void ChargerVueREPONSE() { this.dtvREPONSE = this.DAL.ChargerTableREPONSE(); } #endregion } }
Dans la couche métier on voit la méthode ChargerVueREPONSE() et je voudrais ajouter un filtrer du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using T2_BLL_IDEC; namespace T1_UIL_IDEC { public partial class frmQuestionnaire : Form { #region CHAMPS //Champ d'instance pour BLL_Questionnaire private BLL_Questionnaire QST = null; #endregion public frmQuestionnaire() { InitializeComponent(); this.QST = new BLL_Questionnaire(); } #region METHODES private void ChargementDonnees() { //Appel du chargement de la vue dans BLL this.QST.ChargerVueQUESTION(); this.QST.ChargerVueSOUSQUESTION(); this.QST.ChargerVueREPONSE(); } private void LiaisonDonnees() { //Liaison des données au BindingSource this.bdsQuestion.DataSource = this.QST.VueQUESTION; this.navQuestions.BindingSource = this.bdsQuestion; //et liaison du bindingsource à la navigation //Liaison des données des contrôles this.lblQuestion.DataBindings.Add("Text", this.bdsQuestion, "Que_Libelle"); this.dgvSousQuestion.DataSource = this.QST.VueSOUSQUESTION; this.dgvReponse.DataSource = this.QST.VueREPONSE; } #endregion private void frmQuestionnaire_Load(object sender, EventArgs e) { this.ChargementDonnees(); this.LiaisonDonnees(); } } }
Biensûr, ID_SousQuestion ne se trouve pas dans dtvREPONSE, mais dans dtvSOUSQUESTION. Ma question est donc, comment récupérer cet ID ? J'ai beaucoup cherché avant de venir poser ici...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void ChargerVueREPONSE() { this.dtvREPONSE = this.DAL.ChargerTableREPONSE(); this.dtvREPONSE.RowFilter = "ID_SousQuestion"; }
Partager