DataGridViewComboBoxColumn 的问题

f3135210 2008-01-19 12:53:34
我的步骤:

1.新键了一个Windows 窗体 在上面拖了一个datagridview 控件
2.手动的绑定了datagridview 数据源为 我的SQL2000 数据库中的一张名为 "实验表" 表。

说明:实验表 中有两个字段 “学号” “成绩” 学号为关键字
并插入了一些数据:

学号 成绩

1 优秀

2 良好

3 中等

3.单击 datagridview 编辑列 把 “成绩” 的 ColumnType 改成 DataGridViewComboBoxColumn

4.并把 “成绩” 的 Name 改为 Score
DataPropertyName 选择 成绩
DataSource 选择 实验表BindingSource
DisplayMember 选择 成绩
ValueMember 选择 成绩
DisplayStyle 选择 Nothing

然后运行 ; 问题来了```


DataGridViewComboBoxColumn 的下列菜单 是出来了 显示了 “ 优秀 , 良好 ,中等 ”

但是没办法选择了`` 比如: 选择 学号为 1 的成绩 下的单元格 “优秀 , 良好 ,中等 ”都出来了

但是,就算你选择了 “中等” 它不是在该行改为 “中等” 而是跳到 “学号” 为 3 的那行去了

又比如你在 “成绩” 列 把 学号为3的成绩由 “中等” 改为 “优秀” 时 你一选择 “优秀”

它又跳到 “学号” 为 1 的那行去了````` 郁闷``````


我要的效果就是 :比如,我想把“学号”为 1 的 “成绩” 改成 “中等” 直接在
DataGridViewComboBoxColumn 的下列菜单中选择 “优秀”后,该“学号”为 1 的成绩就改成了 “优秀” 了

高手门请教教 。。。
...全文
631 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
f3135210 2008-01-24
  • 打赏
  • 举报
回复
  幽灵阿呆    东西我已经收到了```
       
 

     哎``````




             总算对 DataGridViewComboBoxColumn  有点理解了`````



    DataGridViewComboBoxColumn 真是个怪东西`````





      再次感谢 幽灵阿呆的帮助,以及曾经看过并留言的朋友````



                           结帖````



                      
GhostAdai 2008-01-23
  • 打赏
  • 举报
回复
补充:脚本是我用MSSQL数据库里提供的功能自动生成的,确定你的数据库里没有名为“Test”的数据库,如果你怕脚本里含恶意代码的话就自己参考我的代码做一下。
GhostAdai 2008-01-23
  • 打赏
  • 举报
回复
示例已经给你发过去了,注意里面有个SQL脚本是我示例里用到的数据库脚本,你用查询分析器打开执行一下就可以生成示例数据库,数据请自己填写
f3135210 2008-01-22
  • 打赏
  • 举报
回复
非常感谢 幽灵阿呆的解答`` 虽然,我还不是很理解 DataGridViewComboBoxColumn



看来你还是发个例子给我吧`````




我的邮箱 chenwanfi@163.com



还有谢谢 cheng7xicx_jsp 的补充~~~
cheng7xicx_jsp 2008-01-22
  • 打赏
  • 举报
回复
上图补充 dataGridView 第一列与后两个不同 后两列是自带的 DataGridViewComboBoxColumn
cheng7xicx_jsp 2008-01-22
  • 打赏
  • 举报
回复

GhostAdai 2008-01-22
  • 打赏
  • 举报
回复
补充一下:总之DataGridViewComboBoxColumn这个类比较奇怪,如果被绑定的数据源表里有数据的话,就必须在对它所属的DataGridView绑定数据源之前就得把DataGridViewComboBoxColumn列的数据绑定好,或者在DataGridView绑定好数据源之后先移除需要指定为DataGridViewComboBoxColumn类型的列,然后手动建一个DataGridViewComboBoxColumn列,指定该列的DataSource、DisplayMember和ValueMember之后,将该列添加到DataGridView中去。
wxg22526451 2008-01-21
  • 打赏
  • 举报
回复
up
GhostAdai 2008-01-21
  • 打赏
  • 举报
回复
我试了一下,没有问题,你在添加DataGridViewComboBoxColumn列并映射列名之前要先删除DataGridView里对应的那一列。你再试试,如果不明白的话留下你的邮箱,我做了个例子,可以发给你看看
mychinabc 2008-01-20
  • 打赏
  • 举报
回复
帮顶:)
f3135210 2008-01-20
  • 打赏
  • 举报
回复
大哥 ,吃顿饭不用那么久吧````


我顶`````
f3135210 2008-01-20
  • 打赏
  • 举报
回复
我象你说的做了```


运行时出错`````


原因: DataGridViewComboBoxCell 无效

请处理 DataError 事件``````




高手请再次指教``````

谢谢``````
GhostAdai 2008-01-20
  • 打赏
  • 举报
回复
先给第一个思路吧。首先你的表如果设计就是像你帖子里那样的话就不合理,成绩既然是以优秀、良好等这些来表示就应该另建一个表,把各种成绩在实验表里用成绩的编号表示,这样可以避免冗余。比如就叫成绩表吧:
DataGridViewComboBoxColumn
DataSource 选择 成绩表BindingSource
DisplayMember 选择 成绩
ValueMember 选择 编号
因为现在没在自己机子上,没法调程序,但这样应该没问题,试试看。
f3135210 2008-01-19
  • 打赏
  • 举报
回复
期待```````
GhostAdai 2008-01-19
  • 打赏
  • 举报
回复
去吃饭,先做个记号,如果回来还没人说答案我就看看能不能给个答案。
f3135210 2008-01-19
  • 打赏
  • 举报
回复
我的 datagridview 都是对应绑定到 数据源````


窗体一载入` 它就把 “实验表” 的内容给完全显示。

学号 成绩

1 优秀

2 良好

3 中等


当我想把 学号 为 3 的成绩 改成 优秀 时 我只要单击 该DataGridViewComboBoxColumn 选择 优秀

该 学号 为 3 的成绩 就变成 优秀 了```` 这就是我想要的效果

高手门多多指导啊`````
f3135210 2008-01-19
  • 打赏
  • 举报
回复
TO : Coaido 能说得明白点吗?
f3135210 2008-01-19
  • 打赏
  • 举报
回复


DataGridTextBoxColumn col =(DataGridTextBoxColumn)this.dataGrid1.TableStyle[0].GridColumnStyle[0];


datagridview 好象没有 .TableStyle[0].GridColumnStyle[0]; 啊````



我用的是 datagridview 啊`` 对于 以前的 dataGrid 都不怎么理解啊```


TO : syxsyx7 能贴点 datagridview 来实现我要的功能的方法吗?


谢谢````
Coaido 2008-01-19
  • 打赏
  • 举报
回复
可以使用class 定义一个类
syxsyx7 2008-01-19
  • 打赏
  • 举报
回复
哈.我也是新手~~经验比较少


//声明一个成员变量
int row,column;
ComboBox box= new ComboBox();

//窗体加载的事件
private void Form3_Load(object sender, System.EventArgs e)
{

this.sqlDataAdapter1.Fill(this.dataset11,"transInfo");
box.Items.AddRange(new object[]{"存入","支取"});
//表样式是在设计界面做的
DataGridTextBoxColumn col =(DataGridTextBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[0];
box.Dock = DockStyle.Fill;
col.TextBox.Controls.Add(box);
//注册下拉列表更改提交事件
box.SelectionChangeCommitted+=new EventHandler(box_SelectionChangeCommitted);
}
//更改crrentcell时的事件获取当前行和列的值
private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
{
row = this.dataGrid1.CurrentCell.RowNumber;
column = this.dataGrid1.CurrentCell.ColumnNumber;

}
//更改datagrid里显示的值
private void box_SelectionChangeCommitted(object sender, EventArgs e)
{
this.dataGrid1[row,column ] = this.box.SelectedItem.ToString();
}


加载更多回复(2)

110,535

社区成员

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

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

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