Привязать ListBox с несколькими полями - PullRequest
4 голосов
/ 23 июня 2010

Я использую VS2010 для c #.У меня есть некоторые данные в таблице

Результаты (team1, team2, battingteam, bowlingteam, score). Я использую bindingSource, чтобы связать его со списком.Проблема в том, что я могу показать только один элемент в свойстве DisplayMember списка (например, только team1 или team2).Я хочу сделать что-то вроде

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

как это сделать?

Ответы [ 4 ]

14 голосов
/ 16 сентября 2013

Во-первых, вы можете оставить свой DisplayMember с одним свойством, скажем:

ListBox1.DisplayMember = "team1";

Теперь перейдите к вашей форме в режиме [Дизайн], щелкните правой кнопкой мыши ListBox -> Свойства.

В верхней части окна «Свойства» нажмите «События» (значок молнии),

найдите «Формат» в списке событий ниже (в разделе «Свойство изменено») и введите имя некоторого события, скажем: ListBox1Formatи нажмите Enter.Вы увидите это:

private void ListBox1Format(object sender, ListControlConvertEventArgs e)
{

}

А теперь напишите следующие строки внутри:

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;
}

Вот и все;)

1 голос
/ 17 июня 2014

Я также пытался сделать что-то подобное и нашел с комбинацией sql и display member, это было очень просто.Например,

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";

Мне было проще просто манипулировать sql, чем писать много строк кода.Надеюсь, это поможет с точки зрения упрощения кодирования.

1 голос
/ 23 июня 2010

Я не знаю, в каком типе данных у вас есть ваши данные ... но, например, если они у вас есть в DataTable, возвращенном из db, вы можете создать List<string> объект, итерировать строки с данными и создавать элементы в объекте списка с форматированием данных, как вы хотите, и к концу привязать объект списка непосредственно к вашему списку, как показано ниже

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 голосов
/ 24 ноября 2016

Я думаю, что лучшее решение для этого на уровне C # состоит в том, чтобы иметь агент KeyValuePair, добавить свое множественное значение к ключу или к значению, а затем назначить его списку, как показано ниже: Предположим, у меня есть список класса ученика, которыйэто StudentList, тогда:

    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();
...