关于Datagrid与字符串数组绑定,不能显示字符串而显示字符串长度问题!!!
为什么字符串数组用Datagrid显示,不能正确的显示字符串内容而是显示字符串的长度?
如:string stuff = new string[]{"one","two","three"};
dataGrid.SetDataBinding(stuff,null);
在Datagrid中显示的是字符串的长度:3,3,5。
而为什么为字符串创建一个包装类后就能解决这个问题:
protected class Item
{
public Item(string text)
{
m_text = text;
}
public string text
{
get{ return m_text};
}
private string m_text;
}
请问什么是包装类?它又什么作用?这个包装类为什么能解决这个问题?
谢谢!非常感谢!!!
问题点数:100、回复次数:9Top
1 楼panyee(快乐王子)回复于 2003-09-04 18:53:42 得分 50
msdn中的说明:
如果其他结构中的对象(例如,数组中的元素)公开公共属性,也可以将 DataGrid 控件绑定到这些结构。网格将显示结构中元素的所有公共属性。例如,如果将 DataGrid 控件绑定到一个客户对象数组,则网格将显示这些客户对象的所有公共属性。在某些情况下,这意味着虽然可以绑定到结构,但可能没有实用的应用程序。例如,可以绑定到一个整数数组,但是因为 Integer 数据类型不支持公共属性,所以该网格不能显示任何数据。
也就是说, 这样绑定时, 会把对象元素的所有公共属性都显示出来
字符串只有一个公共属性, 即Length
你自定义的这个对象, 它有属性text, 所以在绑定时可以显示出它的文本来Top
2 楼panyee(快乐王子)回复于 2003-09-04 18:55:15 得分 0
SetDataBinding 方法来绑定该控件
如果数据源是数据集,则它可能是窗体中的一个对象或者是 XML Web services 传递给窗体的对象。可以绑定到类型化数据集或非类型化数据集。Top
3 楼panyee(快乐王子)回复于 2003-09-04 18:58:25 得分 0
包装类是把数据进行重新的封装, 只暴露出public的属性和方法
Top
4 楼xinyulou(心雨楼)回复于 2003-09-04 19:04:32 得分 0
正如快乐王子所说的Top
5 楼showlie(想长膘的小猪……)回复于 2003-09-05 14:52:52 得分 0
to panyee(快乐王子):
你的意思是说,Datagrid只能显示其所绑定的数据源的公共属性,如字符串默认的公共属性是字符串的长度,若要显示字符串内容就要进行get{},那我怎么知道这些数据源的默认的公共属性是什么???
深表感谢!!!Top
6 楼showlie(想长膘的小猪……)回复于 2003-09-08 08:36:55 得分 0
那个包装类和字符串数组怎么联系起来呢?Top
7 楼nice90(我爱射雕,更爱蓉儿)回复于 2003-09-08 08:57:38 得分 0
mark.Top
8 楼CMIC(大象)回复于 2003-09-08 09:46:57 得分 50
把数组作为数据源DataGrid时,DataGrid会查找数组中对象的第一个共有属性时其长度,所以就显示这个长度值.Top
9 楼CMIC(大象)回复于 2003-09-08 09:47:29 得分 0
把数组作为数据源DataGrid时,DataGrid会查找数组中对象的第一个共有属性时其长度,所以就显示这个长度值.Top
10 楼CMIC(大象)回复于 2003-09-08 10:02:38 得分 0
解决问题方法,建立包装类
代码如下:
protected void retrieveButton_Click (object sender, System.EventArgs e)
{
retrieveButton.Enabled = false ;
Item[] items = new Item[] { new Item ( "One" ) ,
new Item ( "Two" ) ,
new Item ( "Three" ) } ;
dataGrid.SetDataBinding ( items , null ) ;
}
protected class Item
{
public Item ( string text )
{
m_text = text ;
}
public string Text
{
get { return m_text ; }
}
private string m_text ;
}Top




