DataGrid如何绑定显示一个对象集合?
比如我有个Users的对象集合,其中包含了N个User对象,而每个User对象又包含了一个Frineds集合对象。每个Friends集合对象又包含了N个Friend对象。
我如何用DataGrid平行的显示出这样的一个对象集合呢?
问题点数:100、回复次数:7Top
1 楼7710703(易水寒)回复于 2002-11-20 16:43:29 得分 0
我记得在MSDN上面有这方面的例子,把DateGrid的每行分成了好几行。你可以看一看,不过好像不能直接进行绑定,还得进行一下其他的处理。Top
2 楼ssfeng(山水)回复于 2002-11-20 17:40:08 得分 0
难道要把对象都再拆成DataSet吗?Top
3 楼ssfeng(山水)回复于 2002-11-21 10:14:03 得分 0
谁能帮我解决这个问题呢?
可惜csdn给的最高分就100,要不我再加分。Top
4 楼saucer(思归)回复于 2002-11-22 07:04:55 得分 100
try something like
<script language="C#" runat="server">
class User
{
string m_sName;
public ArrayList friends = new ArrayList();
public string Name
{
get {return m_sName;}
set {m_sName = value;}
}
public User(string sName)
{
Name = sName;
}
}
class Friend
{
string m_sName;
string m_sNickName;
public ArrayList friends = new ArrayList();
public string Name
{
get {return m_sName;}
set {m_sName = value;}
}
public string NickName
{
get {return m_sNickName;}
set {m_sNickName = value;}
}
public Friend(string sName, string sNickName)
{
Name = sName;
NickName = sNickName;
}
}
void Page_Load(Object sender, EventArgs e)
{
ArrayList a = new ArrayList();
User u;
Friend f,f2;
u = new User("John");
f = new Friend("Sam", "The Dog");
f2 = new Friend("Tim", "Puppy");
f.friends.Add(f2);
f2 = new Friend("Bill", "Hedge");
f.friends.Add(f2);
u.friends.Add(f);
f = new Friend("David", "The Cat");
f2 = new Friend("Tom", "Wacko");
f.friends.Add(f2);
f2 = new Friend("Larry", "Snake");
f.friends.Add(f2);
f2 = new Friend("Adam", "Dude");
f.friends.Add(f2);
u.friends.Add(f);
a.Add(u);
//add more users here
DataGrid1.DataSource = a;
DataGrid1.DataBind();
}
protected void OnItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
ArrayList a;
if (e.Item.DataItem is User)
{
a = ((User)e.Item.DataItem).friends;
}
else
{
a = ((Friend)e.Item.DataItem).friends;
}
if (a.Count > 0)
{
DataGrid dg = new DataGrid();
dg.ItemDataBound += new DataGridItemEventHandler (OnItemDataBound);
dg.DataSource = a;
dg.DataBind();
TableCell tc = new TableCell();
tc.Controls.Add(dg);
e.Item.Cells.Add(tc);
}
}
}
</script>
<asp:datagrid id="DataGrid1" runat="server" OnItemDataBound="OnItemDataBound"/>
Top
5 楼qieyj(温馨港湾)回复于 2002-11-22 09:34:11 得分 0
给你一个不同的绑定风格
datagrid_bgjj.TableStyles.Clear() ;
string dg_cond;
DataSet dg_ds = new DataSet();
dg_cond = "select * from bgjj_table where ssbm =" + lv_nodenum ;
lv_bgjj.Visible = false ;
SqlDataAdapter dg_sqldataAdapter = new SqlDataAdapter(dg_cond ,sqlConnection1);
try
{
sqlConnection1.Open();
dg_sqldataAdapter.Fill(dg_ds,"bgjj");
}
finally
{
sqlConnection1.Close();
}
//绑定数据源
datagrid_bgjj.DataSource = dg_ds.Tables["bgjj"].DefaultView;
//设置显示风格
DataGridTableStyle dgts = new DataGridTableStyle();
dgts.MappingName = "bgjj" ;
dgts.ReadOnly = true ;
datagrid_bgjj.TableStyles.Add(dgts);Top
6 楼ssfeng(山水)回复于 2002-11-22 09:53:31 得分 0
非常感谢各位!
saucer(思归)这个名字很耳熟,好像我的几个问题都是你给的提示哦!:)
我马上去试试!
还有一个问题,是关于OOP的,也请帮忙看看好吗?
http://expert.csdn.net/Expert/topic/1191/1191982.xmlTop
7 楼ssfeng(山水)回复于 2002-11-22 12:01:21 得分 0
问题解决,谢谢!Top




