将 ListBox 与多个字段绑定
Posted
技术标签:
【中文标题】将 ListBox 与多个字段绑定【英文标题】:Bind ListBox with multiple fields 【发布时间】:2011-03-07 02:33:38 【问题描述】:我正在为 c# 使用 VS2010。我在表格中有一些数据
Scores(team1,team2,battingteam,bowlingteam,score) 我正在使用 bindingSource 将它与我的 listBox 绑定。问题是我只能在列表框的 DisplayMember 属性中显示一个成员(例如仅 team1 或 team2)。我想做类似的事情
team1 + " vs " + team2 + ": " + battingteam +" Score: " + score
怎么做?
【问题讨论】:
您使用的是 WinForms 还是 WPF? 您的数据采用哪种格式.. ?? 【参考方案1】:首先,您可以为 DisplayMember 保留一个属性,例如:
ListBox1.DisplayMember = "team1";
现在,以 [设计] 模式进入您的表单, 右键单击列表框 -> 属性。
在属性窗口的顶部,点击事件(闪电图标),
在下面的事件列表中(在 Property Changed 下)查找 Format 并在其中键入一些事件名称,例如: 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;
就是这样;)
【讨论】:
【参考方案2】:我不知道您的数据属于哪种数据类型...但是例如,如果您将它们放在从 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;
【讨论】:
数据在包含许多DataTables的DataSet中。每个 dataTable 都有一个 tableAdapter 我用来获取和填充数据 我要试试那个方法 您可以使用上述方法,但需要将 teamsDataTable.Rows 替换为 dataset.Table[X].Rows【参考方案3】:我也在尝试做类似的事情,发现结合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 然后编写大量代码行更容易。希望它有助于简化编码。
【讨论】:
【参考方案4】:我认为 C# 级别的最佳解决方案是拥有 KeyValuePair 的代理,将多个值添加到键或值中,然后将其分配给列表框,如下所示: 假设我有Student Class的List,也就是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();
【讨论】:
以上是关于将 ListBox 与多个字段绑定的主要内容,如果未能解决你的问题,请参考以下文章
ListBox.SelectedItems 的双向手动绑定实现?
WPF:将 ListBox ContextMenu 的命令参数绑定到 ListBox 的选定项
将数据绑定到 ListBox 并将列表发布到数据库 mvc5
WPF问题,richtextbox控件能绑定到数据表中的一个字段吗?怎么做? listbox选中当前项的事件是啥呢?