[C#] ValueMember sans utiliser de string
Je vous explique rapidement le problème.
Je cherche à remplir des comboBox de la manière suivante :
Un select dans une table
Code:
SELECT reg_code, reg_code + '- ' + Region as Libelle from PO1
à partir de cela je crée une table avec une méthode générique qui me crée mes noms de colonnes.
Code:
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
|
public static DataTable GetTableFromDB(clRequete requete)
{
SqlDataReader drReader = requete.QueryRequete();
DataTable dtTable = new DataTable();
int iNbrCol = drReader.FieldCount;
int iNumCol = 0;
//Crée et Ajoute autant de colonnes à la table qu'il y a de champs du DataReader
do
{
DataColumn Colonne = new DataColumn(drReader.GetName(iNumCol));
dtTable.Columns.Add(Colonne);
iNumCol += 1;
} while (iNbrCol > iNumCol);
int iNumLigne = 0;
//Crée, Ajoute et Remplit les lignes
while (drReader.Read())
{
DataRow ligne = dtTable.NewRow();
dtTable.Rows.Add(ligne);
iNumCol = 0;
do
{
dtTable.Rows[iNumLigne][iNumCol] = drReader.GetValue(iNumCol);
iNumCol += 1;
} while (iNbrCol > iNumCol);
iNumLigne += 1;
}
drReader.Close();
requete.CloseConnection();
return dtTable;
} |
Ensuite je donne la table en source à mon ComboBox.
Et enfin je lui donne le ValueMember et le DisplayMember
(le tout avec GetTableFromDB, la méthode au dessus)
Code:
1 2 3 4
| clRequete cRequete = new clRequete("SELECT reg_code, reg_code + '- ' + Region as Libelle from PO1");
cbRattachement.DataSource = clGeneralMethode.GetTableFromDB(cRequete);
cbRattachement.DisplayMember = "Libelle";
cbRattachement.ValueMember = "reg_code"; |
Jusque là tout allait bien.
Mais maintenant ma string de requete va apsser par une genre de moulinette qui va la modifier.
EN fait les champs que je lui donne appartiennent à un catalogue qui lui permet d'avoir certaines infos, dont un Nom d'affichage différent.
La moulinette va transformer la requet en cela
Code:
SELECT isnull( PO1.reg_code,-1) as 'Code Région' , isnull( PO1.reg_code,-1) + '- ' + Region as Libelle from sysadm.PO1 PO1
Pour ceux qui aurait suivi jusque là, j'ai donc besoin de donner le ValueMember autrement que par le string "reg_Code".
Il me reste 2 solutions (je crois) :
-Avoir une méthode à laquelle je donne le "reg_code" et qui me renvoi "Code Région", le problème est que vu le catalogue, c'est très dur voir impossible (plusieurs champs st identique si l'on n'a pas la table dans laquelle on cherche)
-Donner le ValueMember par un numéro, qui correspondrait à l'ordre des champs dans le select.
En espérant avoir été assez clair, merci à ceux qui auront lu jusqu'au bout.