comboBox绑定datagridview

windxx 2010-09-09 02:10:22
datatable dt1有如下信息:
id courseid coursename
001 1 语文
001 2 数学
002 2 数学
003 3 英语
datatable dt2有如下信息:
courseid coursename
1 语文
2 数学
3 英语
4 物力
5 化学


要求:
1.在DataGridView dgv上显示dt1的信息;
2.combBox comb 的列表中,显示dt2的信息(也就是comb的datasource是dt2);
3.在点击dgv的时候,comb上显示相应dgv行courseid,coursename的信息(valuemember = courseid,displaymember = coursename);
4.用bandingsource的方式实现(就像绑定textbox那样)

不知道能否实现,请大家执教
尽量给出代码步骤,谢谢
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
windxx 2010-09-09
  • 打赏
  • 举报
回复
ls可能还是没有看清楚,不过还是感谢。

如果没有直接的实现(目前不知道有没有用,希望高人指点)
那么是不是可以用这样的实现

拿txtbox为例
txtbox绑定到bind上
dgv绑定到bind上
那么他们对应的改变好像是通过bind来实现的

也就是说
txtbox——>bind——>dgv
或者
dgv——>bind——>txtbox
也就是感觉上bind(也就是bindingsource类)里边应该有一个类似指针一样的东西指向当前数据(我们可以设为P,都是假设的实际上有没有还请指教)

并且
comb可以进行这样的应用
comb.datasource = bind2;(bind2为新的bingdingsource)
comb.displaymember = ...;
comb.valuemember = ...;

那么是不是可以在bind的"改变"事件中同时对bind2中的当前数据指针进行改变(bind的P值赋给bind2的P值),这样就可以实现了。
那问题是,是否有这样的P属性?bind"改变"事件是什么?如何为P赋值?
谢谢
以上只是设想,如果有直接的方法还望指教!
wuyq11 2010-09-09
  • 打赏
  • 举报
回复
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (this.dataGridView1.CurrentCell.OwningColumn.Name == "clmTest")
{
((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}

}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.dataGridView1.CurrentRow.Cells["name"].Value = ((ComboBox)sender).Text;
}

cmbox.DataSource = 下框的数据源;
cmbox.DataPropertyName= datagrid的数据源的要绑定的列;
cmbox.d...Member="下拉框显示的TEXT";
cmbox.ValueMember="隐藏的值";

chazikai24 2010-09-09
  • 打赏
  • 举报
回复
1.dgv.datasources = dt1;
2.for (int i;i<dt2.rows.count;i++)
{
commobox1.item.add(dt2.rows[i]["courseid"].tostring()+dt2.rows[i]["coursename"].tostring());
}
3.用datagridview的dataGridView1_SelectionChanged事件来响应联动
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (this.dataGridView1.SelectionMode != DataGridViewSelectionMode.FullColumnSelect)
{
int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
combobox1.Text = commobox1.item.add(dt2.rows[i]["courseid"].tostring()+dt2.rows[i]["coursename"].tostring());
};
}
windxx 2010-09-09
  • 打赏
  • 举报
回复
这样每次都要写click事件,多、重复的时候比较麻烦
我的意思是,用textbox绑定的方法
具体写下吧:

bandingsource bind = new bandingsource();
bind = dt;
dgv.datasource = bind;
txtBox.databandings.add(...);

这样的形式。
谢谢

xiaoyi_nuo 2010-09-09
  • 打赏
  • 举报
回复
哦哦,可以的哇,点击datagridview的时候,设置其属性点击的都是一行,然后通过他其中的行的那个科目列的值,去匹对combox里面的值,然后就可以了哇

111,129

社区成员

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

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

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