使用多个字段绑定ListBox

时间:2010-06-23 00:43:05

标签: c# data-binding listbox

我正在使用VS2010进行c#。我在表格中有一些数据

得分(team1,team2,battingteam,bowlingteam,得分)我正在使用bindingSource将其与我的listBox绑定。问题是我只能在列表框的DisplayMember属性中显示一个成员(例如team1或team2)。我想做像

这样的事情
team1 + " vs " + team2 + ": " + battingteam +" Score: " + score

怎么做?

4 个答案:

答案 0 :(得分:14)

首先,你可以给你的DisplayMember留下一个属性,比如说:

ListBox1.DisplayMember = "team1";

现在,转到[设计]模式中的表单, 右键单击ListBox - >属性。

在“属性”窗口的顶部,单击“事件(闪电图标)”,

在下面的事件列表中查找格式(在Property Changed下)并输入一些事件名称,例如: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 :(得分:1)

我不知道您拥有数据的数据类型...但是例如,如果您在db中返回DataTable,则可以创建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;

答案 2 :(得分:1)

我也尝试做类似的事情,发现使用sql和display成员的组合,这很简单。例如

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然后编写大量代码更容易。希望它有助于简化编码。

答案 3 :(得分:0)

我认为C#级别的最佳解决方案是拥有KeyValuePair的代理,将您的多个值添加到密钥或值,然后将其分配给列表框,如下所示: 假设我有Student Class列表,即StudentsList,那么:

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