2012-04-13 47 views
1

是否可以将Datagridview绑定到StringCollection? 我试图做到这一点的方式,而不是收集的datagridview的项目将Datagridview绑定到StringCollection

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

芽显示了项目的长。

+0

的 可能的复制http://stackoverflow.com/questions/1104341/net-c-sharp-binding -iliststring-to-a-datagridview – Markissimo 2012-04-13 12:23:27

+0

它不是重复的,它的.net2.0 – Habib 2012-04-13 12:39:16

回答

2

问题是,当它绑定到StringCollection时,基础类型为string,因此它将从找到的类型string中抽出第一个属性来显示。该属性是长度。

你可以做的是将你的StringCollection包装在你自己制作的类中,并公开一个属性来显示string的文本。为string

包装类:

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; 
+0

是否有可能通过更改DataMember属性而无需包装? – 2012-04-16 08:05:15

+1

@Ask,'DataMember'采用属性的名称。如果你看[String's Public Properties](http://msdn.microsoft.com/en-us/library/system.string_members(v = vs80).aspx),你会发现它只有两个属性,没有人能得到你的字符串文本。所以,没有什么可以设置'DataMember'来获得文本。唯一的方法是提供你自己的类,它提供自己的属性暴露字符串。你可以使用'List <>',或'BindingList <>',或'ObservableCollection'等来代替'StringCollection'。 – 2012-04-16 14:04:22

+0

感谢您的评论。默认情况下,你只能在属性编辑器中选择StringCollection,这就是为什么我坚持它。 – 2012-04-16 17:56:53