关于DataGridView里的ComboBox的难题(高分求解)

JackyWu2003 2008-12-20 06:24:11
我现在需要在DataGridView里加入一个ComboBox控件。这个ComboBox与普通不同的是,每一行所绑定的数据是不一样的。
比如现在有如下一个DataGrid:

ID UserName
1 [Jacky] <-- UserName栏里是下拉框,对于ID=1这一行,它有Jacky, Tom两个选项,可供选择
2 [Mary] <-- 对于ID=2这一行,它有Mary, Sharm两个选项,可供选择

请问是否有什么好的办法实现?或者有什么解决思路?
...全文
344 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangping_li 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 flyjimi 的回复:]
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
ComboBox cbx = (ComboBox)e.Control;
cbx.DataSource = newDataSource;
}
}
[/Quote]
像你这样写肯定不行的,除非再注册ComboBox的下拉列表事件,根据当前行的cell[0]的值取对应的数据然后再张定,但是这样的话每次选择都会执行 这个事件的(选择100执行100次),当然你可以在之前判断绑定的值是不是想要的,如果是就不绑定了,与其写一些毫无意义的代码去判断还不如自己手动绑定,那样自己操作也方便,提交的时候遍历下直接提交
flyjimi 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 JackyWu2003 的帖子:]
我现在需要在DataGridView里加入一个ComboBox控件。这个ComboBox与普通不同的是,每一行所绑定的数据是不一样的。
比如现在有如下一个DataGrid:

ID UserName
1 [Jacky] <-- UserName栏里是下拉框,对于ID=1这一行,它有Jacky, Tom两个选项,可供选择
2 [Mary] <-- 对于ID=2这一行,它有Mary, Sharm两个选项,可供选择

请问是否有什么好的办法实现?或者有什么解决思路?
[/Quote]

可以实现。
在dataGridView的EditingControlShowing方法中改变当前ComboBox的数据源。
这样在点击ComboBox进行编辑的时候,每行可以有不同的选项。

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
ComboBox cbx = (ComboBox)e.Control;
cbx.DataSource = newDataSource;
}
}
net5i 2008-12-21
  • 打赏
  • 举报
回复
手动添加行和列是比较好的,然后设置每个单元格的显示数据
C_sdnElf 2008-12-21
  • 打赏
  • 举报
回复
关注..up
sanjin240 2008-12-21
  • 打赏
  • 举报
回复
1 把该combobox绑定到 datagridview上
2 先判断在datagridview 鼠标所点的单元值
3 根据这个单元的值,判断 往combobox items 中添加值

不知道 理解的对不对哈 只供参考

wangping_li 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 JackyWu2003 的帖子:]
我现在需要在DataGridView里加入一个ComboBox控件。这个ComboBox与普通不同的是,每一行所绑定的数据是不一样的。
比如现在有如下一个DataGrid:

ID UserName
1 [Jacky] <-- UserName栏里是下拉框,对于ID=1这一行,它有Jacky, Tom两个选项,可供选择
2 [Mary] <-- 对于ID=2这一行,它有Mary, Sharm两个选项,可供选择

请问是否有什么好的办法实现?或者有什么解决思路?
[/Quote]
这个的话恐怕得自己手动添加dataGridView的行和列了,因为你对应的ComboBox这一列每一行绑定的数据都不一样
你可以循环你的数据源来创建dataGridView的行和列,然后根据数据源的ID值当条件来绑定ComboBox的数据源
如你添加两列:


DataGridViewColumn column = new DataGridViewColumn();
column.CellTemplate = new DataGridViewTextBoxCell();
column.HeaderText = "ID";
dataGridView.Columns.Insert(0,column);

DataGridViewColumn columnIncome = new DataGridViewColumn();
columnIncome.CellTemplate=new DataGridViewComboBoxCell
columnIncome.HeaderText = "UserName ";
dataGridView.Columns.Insert(1, columnIncome);

然后在遍历你的数据源将ID值添加到
DataGridViewRow row = dataGridView.Rows[0].Clone() as DataGridViewRow;
row.Cells[0].Value =ID值
row.Cells[1的数据源可以根据你的Cells[0]的ID值来来设定的
JackyWu2003 2008-12-21
  • 打赏
  • 举报
回复
2楼,谢谢你的思路。但我的程序是Windows Form的,并不是网页。所以好像没有FindControl这个控件。

3楼,datagridview里可以直接添加checkBox控件的。在某一列添加控件,甚至是自定义的控件都很容易,但要绑定不同的数据就感觉无从下手了。

请问还有没有人有其它解决思路呢?
flyjimi 2008-12-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangping_li 的回复:]
引用 9 楼 flyjimi 的回复:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
ComboBox cbx = (ComboBox)e.Control;
cbx.DataSource = newDataSource;
}
}

像你这样写肯定不行的,除非再注册ComboBox的下拉列表事件,…
[/Quote]

你直接拿这个代码当然不行,这里都还没有判断是哪一行,以确定该重新绑定哪个数据源。也没有判断当前的ComboBox是不是已经绑定对了,就不再执行绑定。
每一行绑定的数据源从哪里来不是现在关心的。

选择100次执行100次,有关系吗。
如果每次取数据慢,可以用缓存,或首次就取出。每行绑定的数据不一样,这些数据你总要读取出来的,只是决定是每次选择编辑的时候都读取,还是读取一次缓存起来。
china_west 2008-12-21
  • 打赏
  • 举报
回复
我觉得每行每列每个空格都分别添加
hgrice2 2008-12-20
  • 打赏
  • 举报
回复
我的问题也差不多啊~不过我是在datagridview里加checkBox
ginni215 2008-12-20
  • 打赏
  • 举报
回复
好象比较麻烦,得先用FindControl()针对每一行去找到ComboBox,
然后在根据ID号从表里找到对应的UserName,
在通过:DataSource DataTextField DataValueField去数据绑定

大概思路应该就是这个样子,你可以试一下~~
JackyWu2003 2008-12-20
  • 打赏
  • 举报
回复
帮顶也给分。如能提供一些思路也可以给分。希望各位多多帮忙。谢谢。

110,529

社区成员

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

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

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