C# 将Datagridview绑定到StringCollection

C# 将Datagridview绑定到StringCollection,c#,winforms,datagridview,.net-2.0,C#,Winforms,Datagridview,.net 2.0,是否可以将Datagridview绑定到StringCollection? 我试着用一种方式做这件事 StringCollection dict = Settings.Default.MyDict; BindingSource bs = new BindingSource(); bs.DataSource = dict; this.DGV.DataSource = bs; Bud而不是collection datagridview的items显示项目的长度。问题

是否可以将Datagridview绑定到StringCollection? 我试着用一种方式做这件事

    StringCollection dict = Settings.Default.MyDict;
    BindingSource bs = new BindingSource();
    bs.DataSource = dict;
    this.DGV.DataSource = bs;

Bud而不是collection datagridview的items显示项目的长度。

问题是,当它绑定到
StringCollection
时,底层类型是
string
,因此它会从type
string
中拉出它找到的第一个属性以显示。这个属性就是长度

您可以做的是将您的
StringCollection
包装在自己创建的类中,并公开将显示
字符串的文本的属性

字符串的包装类

public class MyString
{
    private string _myString;

    public string Text
    {
        get { return _myString; }
        set { _myString = value; }
    }

    public MyString(string str)
    {
        _myString = str;
    }
}
您的代码变成:

StringCollection dict = Settings.Default.MyDict; 
// put your string in the wrapper
List<MyString> anotherdict = new List<MyString>();
foreach (string str in dict)
{
    anotherdict.Add(new MyString(str));
}
BindingSource bs = new BindingSource();
// bind to the new wrapper class
bs.DataSource = anotherdict;
this.DGV.DataSource = bs; 
StringCollection dict=Settings.Default.MyDict;
//把你的绳子放在包装袋里
List anotherdict=新列表();
foreach(dict中的字符串str)
{
添加(新MyString(str));
}
BindingSource bs=新的BindingSource();
//绑定到新的包装器类
bs.DataSource=另一个dict;
this.DGV.DataSource=bs;

its的可能重复项不是重复项,its for.net2.0是否可以通过更改DataMember属性而不使用包装器执行此操作?@Ask,
DataMember
采用属性名称。如果你看一看,你会发现它只有两个属性,没有一个属性可以得到字符串的文本。因此,您无法将
DataMember
设置为可以获取文本的任何内容。唯一的解决方法是提供自己的类,该类提供自己的属性来公开字符串。您是否可以使用
列表
,或
绑定列表
,或
可观察集合
等来代替
字符串集合
?谢谢您的评论。默认情况下,您只能在属性编辑器中选择StringCollection,这就是为什么我坚持使用它的原因。