datagridview 绑定后不能显示自定义数据

winsei 2009-12-31 03:17:07
当winform窗体加载时,进行datagridview 绑定,不能显示自定义列的数据。而在窗体加载后,触发某个按钮事件进行datagridview 绑定,则可以显示自定义列的数据。请问这是什么原因啊?很郁闷。
自定义列的数据为手动代码进行赋值的。
...全文
364 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
winsei 2010-01-02
  • 打赏
  • 举报
回复
我自己发现原因了,原因如下:
在load事件中绑定时,窗体未显示出来
而我把自定义列单元格的数据和线条都放在Paint事件中,而Paint事件需要等到窗体显示完成,并激活时,才触发。所以不能触发Paint事件,也就没有显示出数据。
后来我把数据绑定代码放到DataGridView的Paint事件中。
谢谢各位。
lawbc 2010-01-02
  • 打赏
  • 举报
回复
界分
HarveyYan 2009-12-31
  • 打赏
  • 举报
回复
dgvRemaindList.DataSource = iBLL.GetList();
dgvRemaindList_DataSourceChanged

按这个顺序也不行?
winsei 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 edward8819 的回复:]
应该是DataSourceChanged事件在第一次加载绑定时并不会触发,只有在加载后DataSource有更改时才触发的。
所以你可以放Load事件里,绑定加载一次自定义列。
[/Quote]
我有试过去触发DataSourceChanged事件,触发后还是没有显示,我把代码放到load中也是一样。
HarveyYan 2009-12-31
  • 打赏
  • 举报
回复
应该是DataSourceChanged事件在第一次加载绑定时并不会触发,只有在加载后DataSource有更改时才触发的。
所以你可以放Load事件里,绑定加载一次自定义列。
winsei 2009-12-31
  • 打赏
  • 举报
回复
DataSourceChanged中的代码:

void dgvRemaindList_DataSourceChanged(object sender, EventArgs e)
{
for (int i = 0; i < dgvRemaindList.Rows.Count; i++)
{
MyDataGridViewCell MyCell = dgvRemaindList.Rows[i].Cells["MyTp"] as MyDataGridViewCell;

object value = dgvRemaindList.Rows[i].Cells["Tp"].Value;

if (value != null && value as string != "")
{
string strTP = value.ToString();

string[] tps = strTP.Split(',');
foreach (string str in tps)
{
int position = str.ToInt();
//判断牙位段
if (position > 10 && position < 20)
{
MyCell.ValueText1 += position.ToString().Remove(0, 1);
}
if (position > 20 && position < 30)
{
MyCell.ValueText2 += position.ToString().Remove(0, 1);
}
if (position > 30 && position < 40)
{
MyCell.ValueText3 += position.ToString().Remove(0, 1);
}
if (position > 40)
{
MyCell.ValueText4 += position.ToString().Remove(0, 1);
}
if (position == 30)
{
MyCell.ValueText2 += "上颌";
}
if (position == 60)
{
MyCell.ValueText3 += "下颌";
}
}
}
}
}
winsei 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 z250821016 的回复:]
把绑定代码 写在一个类里  在在load里调用!~~
[/Quote]
写在类里调用,跟直接写在load中有什么区别?
卡布奇诺48 2009-12-31
  • 打赏
  • 举报
回复
把绑定代码 写在一个类里 在在load里调用!~~
winsei 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 l171147904 的回复:]
CS 没有  databind();

LZ 为页面添加  LOAD函数(页面初始化函数)
这里去 加载 自定义列
[/Quote]
我试过了,还是不行的。我是在LOAD中绑定的。
l171147904 2009-12-31
  • 打赏
  • 举报
回复
CS 没有 databind();

LZ 为页面添加 LOAD函数(页面初始化函数)
这里去 加载 自定义列
winsei 2009-12-31
  • 打赏
  • 举报
回复
liudongyue1987 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 winsei 的回复:]
引用 5 楼 xinsiyu2008 的回复:
估计你少了一个datagridview.databind();

呃,没有这个方法
[/Quote]
.....
winsei 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xinsiyu2008 的回复:]
估计你少了一个datagridview.databind();
[/Quote]
呃,没有这个方法
csdnfan 2009-12-31
  • 打赏
  • 举报
回复
估计你少了一个datagridview.databind();
winsei 2009-12-31
  • 打赏
  • 举报
回复
dgvRemaindList.DataSourceChanged += new EventHandler(dgvRemaindList_DataSourceChanged);
dgvRemaindList.DataSource = iBLL.GetList();
dgvRemaindList.ClearSelection();

========================
自定义列赋值发生在DataSourceChanged 事件中
十八道胡同 2009-12-31
  • 打赏
  • 举报
回复
你的窗体加载事件怎么写的
code
winsei 2009-12-31
  • 打赏
  • 举报
回复
还没有进行赋值
发生在窗体加载事件中
十八道胡同 2009-12-31
  • 打赏
  • 举报
回复
加载的时候 你的数据源里还没有你的自定义数据吧
我的意思是 你的自定义数据赋值是不是发生在窗体加载之前

111,120

社区成员

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

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

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