【关于 WinForm 下 DataGridView 绑定List 的问题】

love_study 2009-04-22 07:44:51
举例说明一下我的问题:

有两个类:命名空间(WindowsFormsApplication1)
public class ClassA
{
private int _AId;
private string _AName;

public int AId
{
get { return _AId;}
set { _AId = value; }
}
public string AName
{
get{return _AName;}
set{_AName=value;}
}
}


public class ClassB
{
private int _BId;
private string _BName;
private ClassA _ClassA;

public int BId
{
get { return _BId; }
set { _BId = value; }
}

public string BName
{
get { return _BName; }
set { _BName = value; }
}

public ClassA ClassA
{
get { return _ClassA; }
set { _ClassA = value; }
}
}

在窗体Form1上面放置一个DataGridView控件
Form_Load代码:
private void Form1_Load(object sender, EventArgs e)
{
List<ClassB> list_B=new List<ClassB>();
for (int i = 0; i < 3; i++)
{
ClassA a=new ClassA();
a.AId=i;
a.AName="A_"+i.ToString();

ClassB b = new ClassB();
b.BId = i;
b.BName = "B_" + i.ToString();
b.ClassA = a;

list_B.Add(b);
a = null;
b = null;
}
this.dataGridView1.DataSource = list_B;
}

现在的结果是:
BId BName ClassA
0 B_0 WindowsFormsApplication1.ClassA
1 B_1 WindowsFormsApplication1.ClassA
2 B_2 WindowsFormsApplication1.ClassA

我想绑定出如下结果:
BId BName AName
0 B_0 A_0
1 B_1 A_1
2 B_2 A_2

代码怎么实现?
...全文
642 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
joan1027 2009-04-23
  • 打赏
  • 举报
回复
b.ClassA = a; ?????
b.ClassA = a.AName
love_study 2009-04-23
  • 打赏
  • 举报
回复
TO 1 楼:最好 不要 再转换成 DataTable 吧 ,要是再转回 DataTable, 还不如当时就返回一个 DataTable,现在的接口是返回一个 list<T>,

TO 3 楼:重载 ToString 在这个例子是可以的,要是ClassA 还有其他属性 怎么办?

手工绑定列的时候我早已经试过ClassA.AId 这种写法,不行的!

月影 2009-04-22
  • 打赏
  • 举报
回复
手动绑定。 检查一下datagrid是否支持路径语法。
Garnett_KG 2009-04-22
  • 打赏
  • 举报
回复
让ClassA重载ToString就行了。



public class ClassA
{
private int _AId;
private string _AName;

public int AId
{
get { return _AId; }
set { _AId = value; }
}
public string AName
{
get { return _AName; }
set { _AName = value; }
}
//here
public override string ToString()
{
return _AName;
}
}



linxy_cn 2009-04-22
  • 打赏
  • 举报
回复
手动生成DataGridView绑定列
列绑定的时候可以试试ClassA.AId
wxg22526451 2009-04-22
  • 打赏
  • 举报
回复
            //List转化为DataTable
DataTable dt = new DataTable();
dt.Columns.Add("BId", typeof(string));
dt.Columns.Add("BName", typeof(string));
dt.Columns.Add("AName", typeof(string));
for (int i = 0; i < list_B.Count; i++)
{
dt.Rows.Add(list_B[i].BId, list_B[i].BName, list_B[i].ClassA.AName);
}
this.dataGridView1.DataSource = dt;

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧