2010-06-23 5 views
4

J'utilise VS2010 pour C#. J'ai des données dans un tableauLier ListBox avec plusieurs champs

Scores (team1, team2, battingteam, bowlingteam, score) J'utilise bindingSource pour le lier avec ma listBox. Le problème est que je peux montrer seulement un membre dans la propriété DisplayMember de la liste (par exemple team1 ou team2 seulement). Je veux faire quelque chose comme

team1 + " vs " + team2 + ": " + battingteam +" Score: " + score 

comment faire cela?

+0

Utilisez-vous WinForms ou WPF? – Dennis

+0

J'utilise WinForms – SMUsamaShah

+0

dans quel format vous avez vos données .. ?? –

Répondre

1

Je ne sais pas dans quel type de données que vous avez vos données ... mais par exemple, si vous les avez dans DataTable de retour db vous pouvez créer un objet List<string> et itérer lignes DataTable et créer des objets dans l'objet de liste avec la mise en forme des données comme vous voulez et par liste de liens extrémité objet à votre ListBox directement comme ci-dessous

List<string> teams = new List<string>(); 
foreach (DataRow dataRow in teamsDataTable.Rows) 
{ 
    teams.Add(dataRow["team1"].ToString() + " vs " + dataRow["team2"].ToString() + ": " + dataRow["battingteam"].ToString() + " Score: " + dataRow["score"].ToString()); 
} 
listBox1.DataSource = teams; 
+0

Les données sont dans DataSet qui contient de nombreuses tables de données. Chaque dataTable a un tableAdapter que j'utilise pour obtenir et remplir des données – SMUsamaShah

+0

Je vais essayer cette méthode – SMUsamaShah

+0

vous pouvez utiliser la méthode ci-dessus mais en remplaçant teamsDataTable.Rows par dataset.Table [X] .Rows –

14

d'abord, vous pouvez laisser votre DisplayMember avec une propriété, disons:

ListBox1.DisplayMember = "team1"; 

maintenant, allez à votre formulaire un [Design] m ode, faites un clic droit sur ListBox -> Properties.

En haut de la fenêtre Propriétés, cliquez sur les événements (icône de la foudre),

regard pour le format dans la liste des événements ci-dessous (sous la propriété Changé) et tapez-il un nom d'événement, disons: ListBox1Format, et appuyez sur Entrée. Vous verrez ceci:

private void ListBox1Format(object sender, ListControlConvertEventArgs e) 
{ 

} 

Et maintenant écrire ces lignes suivantes à l'intérieur:

private void ListBox1Format(object sender, ListControlConvertEventArgs e) 
{ 
    // Assuming your class called Scores 
    string team1 = ((Scores)e.ListItem).team1.ToString(); 
    string team2 = ((Scores)e.ListItem).team2.ToString(); 
    string battingteam = ((Scores)e.ListItem).battingteam.ToString(); 
    string score = ((Scores)e.ListItem).score.ToString(); 

    e.Value = team1 + " vs " + team2 + ": " + battingteam +" Score: " + score; 
} 

voilà,)

1

J'ai aussi essayé de faire quelque chose de similaire et trouvé avec une combinaison de sql et membre d'affichage, c'était très simple. Par exemple

string sql = "SELECT team1+ 'vs' + team2+ ':' +battingteam + 'Score:' + score"; 
sql += "AS newColumnNametbl from table"; 
ListBox lst = new ListBox(); 
lst.DataSource = ds; //datasource created 
lst.DisplayMember = "newColumnNametbl"; 

J'ai trouvé plus facile de simplement manipuler le sql puis d'écrire beaucoup de ligne de code. J'espère que cela aide en termes de codage plus facile.

0

Je pense que la meilleure solution pour cela au niveau C# est d'avoir l'agent de KeyValuePair, ajouter votre valeur multiple à la clé ou à la valeur puis l'affecter à la liste comme ceci: Supposons que j'ai la liste des étudiants , qui est StudentsList, puis:

MyListBox.DrawMode = DrawMode.Normal; 
    List<KeyValuePair<string, string>> KeyValueList = new List<KeyValuePair<string, string>>(); 
       foreach (Student Curritem in StudentsList) 
       { 
        KeyValueList.Add(
         new KeyValuePair<string, string>(Curritem.FirstName + " Age: <" + Curritem.Age + ">", 
             Curritem.ID.ToString())); 
       } 
       MyListBox.DisplayMember = "Key"; 
       MyListBox.ValueMember = "Value"; 
       MyListBox.DataSource = KeyValueList; 
       MyListBox.Refresh();