DataGridViewComboBoxCell问题

mmiiaaoo 2008-07-21 01:34:49
我的datagridview 有一列是DataGridViewComboBoxCell ,DataGridViewComboBoxCell的绑定是根据datagridview的第二列的值 查找另一张表得到 请问该怎么实现
但是绑定后要显示一个默认值 该默认值的已经保存在绑定datagridview表里 请大家帮忙怎么实现
...全文
945 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
atlasroben 2008-07-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080720/13/2450da63-e6af-4b6f-af45-02b45232ad33.html?seed=532940752
你的另外一张帖子中我的解决方式在我调试的时候有问题我做了一些修改,能够在你目前的环境中解决你的问题了,如果可以用了就帮我结贴了吧:)
atlasroben 2008-07-22
  • 打赏
  • 举报
回复

//取得车型代码
//string mysql = "select patterncode from tabhead where vin='" + comboBox1.SelectedValue.ToString() + "'";
//string cartype = dbclass.dt(mysql, "mysql").Rows[0][0].ToString();

////根据取得的车型绑定dataGridView2
//string s = "select workpos,desno,partname,caozuo,guzhang,paigu,bz from tabzzmb where cartype='" + cartype + "' ";
//dataGridView2.DataSource = dbclass.dt(s, "s").DefaultView;

//确认你上面的代码没有问题
//在你上面的数据绑定完毕之后执行如下代码
//////将你的列添加提取到外面来,不能在循环体内添加,是错误的
DataGridViewComboBoxColumn dcon = new DataGridViewComboBoxColumn();
dataGridView1.Columns.Insert(0, dcon);
//上面的代码已经添加了一个新的combobox列所以我们仅需要修改每一行该列combox的数据源并进行数据绑定
//下面进入循环
//由于dataGridView1默认添加了一行空白行在数据表的最后面所以我这里dataGridView1.Rows.Count-1
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
//获取你需要绑定的数据源由于我的demo环境和你不相同代码略有出入你自己修改
//string s1 = "select providername from tabprovider where desno='" + dataGridView2.Rows[0].Cells["desno"].Value.ToString().Trim() + "'";
//因为我没有你的数据表所以下面这一段是我模拟为每一个combobox构建了一个数据源来做演示
//你只需要将你的sql数据查询结果替换下面这段构建数据源的代码就行了
DataTable dtCombo = new DataTable();
#region 为combobox模拟构建数据源
DataColumn dcCombo = new DataColumn("string");
DataColumn dcComboValue = new DataColumn("value");
dtCombo.Columns.Add(dcCombo);
dtCombo.Columns.Add(dcComboValue);
int n=0;
foreach (char ca in dataGridView1.Rows[i].Cells[2].Value.ToString())
{

DataRow dr = dtCombo.NewRow();
dr[0] = ca.ToString();
dr[1] = n;
dtCombo.Rows.Add(dr);
n++;
}
#endregion

//将你查询出来的数据源绑定到指定的combobox
//(DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]这里我之所以写Cells[0]是因为
//我在前面插入列的时候是插入的第一列 dataGridView1.Columns.Insert(0, dcon);
//你将代码修改成你的指定列就行了

((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DataSource = dtCombo;
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DisplayMember = "string";
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).ValueMember = "value";
//((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).Value = "1";是设定默认选中项
//Value属性的设置值就是你ValueMember绑定列其中的一个值,对应起来的这个你没有问题吧
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).Value = "1";
#region 你的代码
//dcon.DataSource = dbclass.dt(s1, "s1");
//dcon.ValueMember = "providername";
//dcon.DisplayMember = "providername";
//dcon.HeaderText = "供货厂家";
#endregion


}
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
我按照你们的写的 怎么下拉框都点不下来
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 atlasroben 的回复:]
关键代码就如下几句
你只需要在数据绑定以后
指定你要更改的DataGridViewComboBoxCell的相关属性就行了.....

先用行坐标和列坐标定位你需要修改的DataGridViewComboBoxCell
如下代码就是表示修改第3行第3列的combobox里面的数据源并且默认选中其中一项你仅仅需要将每一个你要修改的combobox做如下处理就行了,这下你清楚了吧?

C# code ((DataGridViewComboBoxCell)dataGridView1.Rows[2].Cells[2]).Data…
[/Quote]
我觉得这个方法可行 但是出现问题如上
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
谁帮我解决这个问题 我再给100分
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
列的没行绑定都是不同的哦 根据前面的查找得到
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
分不够 可以加 只要解决问题
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复


// 取得车型代码
string mysql = "select patterncode from tabhead where vin='" + comboBox1.SelectedValue.ToString() + "'";
string cartype = dbclass.dt(mysql, "mysql").Rows[0][0].ToString();

//根据取得的车型绑定dataGridView2
string s = "select workpos,desno,partname,caozuo,guzhang,paigu,bz from tabzzmb where cartype='" + cartype + "'";
dataGridView2.DataSource = dbclass.dt(s, "s").DefaultView;
DataGridViewComboBoxColumn dcon = new DataGridViewComboBoxColumn();
//dcon.DataSource = null;
dcon.ValueMember="providername";
dcon.DisplayMember="providername";
dcon.HeaderText="供货厂家";
dataGridView2.Columns.Insert(4,dcon);

for (int i = 0; i < dataGridView2.Rows.Count; i++)
{

//DataGridViewCell dcon = new DataGridViewCell();
string s1="select providername from tabprovider where desno='" + dataGridView2.Rows[0].Cells["desno"].Value.ToString().Trim() + "'";
//dcon.DataSource=dbclass.dt(s1,"s1");
((DataGridViewComboBoxCell)dataGridView2.Rows[i].Cells[4]).DataSource = dbclass.dt(s1, "s1");
((DataGridViewComboBoxCell)dataGridView2.Rows[i].Cells[4]).ValueMember = "providername";
((DataGridViewComboBoxCell)dataGridView2.Rows[i].Cells[4]).DisplayMember = "providername";
((DataGridViewComboBoxCell)dataGridView2.Rows[i].Cells[4]).Value = "a";
//dcon.DataSource = dataGridView2.Rows[0].Cells["providername"].Value.ToString().Trim();









}


}


我这样写也提示什么先处理dataerror事件 救命啊
je_ck 2008-07-21
  • 打赏
  • 举报
回复
为什么不用一个SQL语句写出来呢??
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
这个win下的哦 不是web
yagebu1983 2008-07-21
  • 打赏
  • 举报
回复
问题的关键所在是取得datagridview的第二列的值。
不知databound事件你试了没有?
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
以上是我的代码 点击那个列一点放映也没有
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复


// 取得车型代码
string mysql = "select patterncode from tabhead where vin='" + comboBox1.SelectedValue.ToString() + "'";
string cartype = dbclass.dt(mysql, "mysql").Rows[0][0].ToString();

//根据取得的车型绑定dataGridView2
string s = "select workpos,desno,partname,caozuo,guzhang,paigu,bz from tabzzmb where cartype='" + cartype + "' ";
dataGridView2.DataSource = dbclass.dt(s, "s").DefaultView;


for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
DataGridViewComboBoxColumn dcon = new DataGridViewComboBoxColumn();
string s1 = "select providername from tabprovider where desno='" + dataGridView2.Rows[0].Cells["desno"].Value.ToString().Trim() + "'";
//dbclass.msgbox(s1,"",0);
//return;
dcon.DataSource = dbclass.dt(s1,"s1");
//DataTable dt = dbclass.dt(s1, "s1");

dcon.ValueMember = "providername";
dcon.DisplayMember ="providername";
dcon.HeaderText = "供货厂家";
dataGridView2.Columns.Insert(4,dcon);







}


}
atlasroben 2008-07-21
  • 打赏
  • 举报
回复
关键代码就如下几句
你只需要在数据绑定以后
指定你要更改的DataGridViewComboBoxCell的相关属性就行了.....

先用行坐标和列坐标定位你需要修改的DataGridViewComboBoxCell
如下代码就是表示修改第3行第3列的combobox里面的数据源并且默认选中其中一项你仅仅需要将每一个你要修改的combobox做如下处理就行了,这下你清楚了吧?
            ((DataGridViewComboBoxCell)dataGridView1.Rows[2].Cells[2]).DataSource = dt;
((DataGridViewComboBoxCell)dataGridView1.Rows[2].Cells[2]).DisplayMember = "depname";
((DataGridViewComboBoxCell)dataGridView1.Rows[2].Cells[2]).ValueMember = "depid";
((DataGridViewComboBoxCell)dataGridView1.Rows[2].Cells[2]).Value = "01";

mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
都没有放映哦
jcobra 2008-07-21
  • 打赏
  • 举报
回复
请看如下代码:
两个表:客户状况表(客户ID,客户名,地址,电话,员工ID,.....);
员工信息表(员工ID,员工姓名,......)
在DataGridView1中显示客户状况表的内容与业务员姓名,且业务员姓名用DataGridViewComboBoxColumn显示,并可更改.



'DataGridView1.AutoGenerateColumns = False
DataGridView1.DataSource = SysDataSet1.Tables("客户状况表") 'DataGridView邦定客户状况表
'在DataGridView中添加业务员姓名列
Dim colYeWu As New DataGridViewComboBoxColumn
colYeWu.DataPropertyName = "员工ID"
colYeWu.Name = "员工姓名"
colYeWu.DataSource = SysDataSet1.Tables("员工信息表")
colYeWu.DisplayMember = "员工姓名"
colYeWu.ValueMember = "员工ID"
colYeWu.HeaderText = "业务员"
colYeWu.Width = 80
colYeWu.SortMode = DataGridViewColumnSortMode.Automatic
DataGridView1.Columns.Add(colYeWu)
atlasroben 2008-07-21
  • 打赏
  • 举报
回复
我刚才试了一下,可以直接更改任意已经绑定的combox里面的内容
你在一个button里面尝试以下代码,在gridview的设计器里面添加3列分别对应代码中的datatable的3列
将gridview第二列设置为text第三列设置为combobox
由于我手上现在有事,代码比较凌乱没有译注,不明白的你与我在线联系

DataTable dt = new DataTable();
DataColumn dc = new DataColumn("名字");
DataColumn dcs = new DataColumn("你好");
DataColumn dc2 = new DataColumn("xx1");
dt.Columns.Add(dc);
dt.Columns.Add(dcs);
dt.Columns.Add(dc2);
DataRow dr;
for (int i = 0; i < 11; i++)
{
dr = dt.NewRow();
dr[0] = "false";
dr[1] = "stringxx" + i.ToString();
dr[2] = "";
dt.Rows.Add(dr);
}

this.dataGridView1.DataSource = dt;
foreach (DataGridViewRow dgvr in dataGridView1.Rows)
{
if (dgvr.Cells[1].Value == null)
{
continue;
}
string all = "";
try
{
all = dgvr.Cells[1].Value.ToString();
}
catch
{

}

if (dgvr.Index < dataGridView1.Rows.Count - 1)
{
DataTable dt1 = new DataTable();
DataColumn dc1 = new DataColumn("string");
dt1.Columns.Add(dc1);


foreach (char ca in all.ToCharArray())
{
DataRow dr1 = dt1.NewRow();
dr1[0] = ca.ToString();
dt1.Rows.Add(dr1);
}
((DataGridViewComboBoxCell)dgvr.Cells[2]).DataSource = dt1;
((DataGridViewComboBoxCell)dgvr.Cells[2]).DisplayMember = "string";
((DataGridViewComboBoxCell)dgvr.Cells[2]).ValueMember = "string";
((DataGridViewComboBoxCell)dgvr.Cells[2]).Value = "r";




}
}
atlasroben 2008-07-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mmiiaaoo 的回复:]
行数超过11行是什么意思啊 如果没有11行就不行马
[/Quote]
我代码里面写死了是dgvr.Index > 0&&dgvr.Index<dataGridView1.Rows.Count-1在这个区域内设定其combobox的值

[Quote=引用 10 楼 mmiiaaoo 的回复:]
你这样手动添加 不是添加到最后一列了吗 但是不是添加到最后一列
[/Quote]
你可以将后面的内容都手动绑定,或者调整列序,至于能否调整列序我帮你看看
atlasroben 2008-07-21
  • 打赏
  • 举报
回复
另外:将你的绑定的combox放在第三列我这里由于是测试写死了的你自己改一下相关的地方.
我在示例中演示的将第二列的string,分割成char数组并作为数据源绑定到第三列的combobox里面,你实际应用改成你要的获取数据源的方式就行了,
至于你所说的默认选中你需要添加以下代码到你的combobox绑定代码后面
    ((DataGridViewComboBoxCell)dgvr.Cells[e.Column.Index]).ValueMember = "string";
((DataGridViewComboBoxCell)dgvr.Cells[e.Column.Index]).Value = "r";

你需要指定你的combobox的valuemember,然后将你的value设置为你需要默认选中的那一个数据的value就行了!
mmiiaaoo 2008-07-21
  • 打赏
  • 举报
回复
你这样手动添加 不是添加到最后一列了吗 但是不是添加到最后一列
加载更多回复(9)

110,571

社区成员

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

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

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