我有一个词典
Dictionary<string, List<string>> SampleDict = new Dictionary<string, List<string>>();
我需要用Dictionary的内容填充listView
例如“SampleDict”包含
One A
B
C
Two D
E
F
listView应该像
一样填充 S.No Item SubItem
1 One A,B,C
2 Two D,E,F
现在我正在为这个方法使用for循环
像
List<String> TepmList=new List<String>(SampleDict.Keys);
for(int i=0;i<TepmList.Count;i++)
{
listView1.Items.Add((i+1).ToString());
listView1.Items[i].SubItems.Add(TepmList[i]);
List<String>Lst=SampleDict[TepmList[i]])
String Str="";
int K=0;
for(int j=0;j<Lst.Count;j++)
{
string s=Lst[j];
k++;
if(k==1)
Str=s;
else
Str=","+Str;
}
listView1.Items[i].SubItems.Add(Str);
}
还有其他方法可以像数据绑定那样做吗?
提前致谢。
答案 0 :(得分:5)
我非常确定ListView
不支持绑定到Dictionary
,但您可以大量简化代码:
foreach(KeyValuePair<string, List<string>> kvp in SampleDict)
{
ListViewItem lvi = listView1.Items.Add(kvp.Key);
string temp = string.Join(", ", kvp.Value);
lvi.SubItems.Add(temp);
}
是否需要这一切。
答案 1 :(得分:1)
您可以为字典中的值项实现自己的集合,并覆盖ToString()方法以提供以逗号分隔的项列表。
class StringList : List<string> {
public override string ToString() {
string result = string.Empty;
foreach( string item in this ) {
if( result.Length != 0 ) {
result += ",";
}
result += item;
}
return result;
}
}
基本上,您只是将相同的代码移动到更好的位置,但它可以更好地重用。你的词典将成为:
Dictionary<string, StringList> SampleDict = new Dictionary<string, StringList>();
在此之后,上面的代码会简化很多。
答案 2 :(得分:1)
int Index=0;
foreach(KeyValuePair<String,List<String>>KVP in Dict)
{
ListViewItem LVI = listView1.Items.Add((Index + 1).ToString());
LVI.SubItems.Add(KVP.Key);
LVI.SubItems.Add(KVP.Value.Select(X => X).Aggregate((X1, X2) => X1 + "," + X2));
Index++;
}