急!! 各位大虾帮忙! ComboBox的问题 (解决给高分!)

kevinzhu59 2006-08-30 05:49:21
我希望做这样一个程序:
一个表在数据库中, 共有5列
现在我在win form上画三个combobox, 想让他们分别绑定一列, 然后以第一个combobox的值作条件联合选择第二个combobox的下拉项, 以此类推是第三个.

举个例子:
NOKIA 3230 RED
NOKIA N70 RED
NOKIA N70 BLUE
NOKIA N72 BLUE
NOKIA N90 BLACK
MOTO U6 PINK
MOTO V3 YELLOW

下面, 在第一个combobox中, 选择NOKIA, 在第二个combobox中就只显示3230, N70(注意! 只出现一次怎么写? distinct怎么加?), N72, N90;
当我在第二个combobox中选择了N70后, 在第三个combobox中只显示RED, BLUE.

很多常见的程序都是这么写的, 我该怎么实现啊? 急!!!
...全文
595 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lagron 2006-08-31
  • 打赏
  • 举报
回复
筛选数据用DataView,根据你的DataTable产生DataView,筛选完了再绑定到ComboBox的DataSource上去,例如:
DataView dvXH = new DataTable(dtXH);
dvXH.RowFilter = "MC = '" + cbbMC.Text.Trim()+"'";//(cbbMC.Text.Trim()=NOKIA)
cbbXH.DataSource = dvXH;
cbbXH.DisplayMember = "XH";
cbbCOLOR也一样,都用DataView就可以解决,ADO.NET中的DataSet本身就是无连接的工作方式,所以从数据库中取出数据,在SQL Server中的大部分功能都能在客户端完成.
kevinzhu59 2006-08-31
  • 打赏
  • 举报
回复
up!
解决就给分! 谢谢!
kevinzhu59 2006-08-31
  • 打赏
  • 举报
回复
这位大哥所言极是!

我现在还有个问题: 我想把这三次查询都用一次da的fill操作, 就是说只进行与物理数据库的一次通信, 剩下的sql操作都在本地的dataset中进行, 这样可以缓解数据库压力, 而且可以有更好的性能, 我希望能对本地的dataset进行select操作, 类似这样的代码, 怎么写?

不用针对我的程序, 就是教我怎么对dataset进行select操作就行了. 谢谢!

具体点就是我第一次已经取回了整张表在dataset中, 第一个combobox用了其中一列, 我希望第二个combobox的select参数用第一个combobox的选择结果, 然后对本地的dataset进行查询, 选出其中第二列, 这样的代码怎么写?
pv000 2006-08-31
  • 打赏
  • 举报
回复
楼上说的都是对的,LZ照着做就肯定是可以的,其实dropdownlist和ComboBox是一样的,在有的时候dropdownlist用起来比ComboBox还麻烦,所以LZ照着做就没问题的
hy_lihuan 2006-08-31
  • 打赏
  • 举报
回复
艾,我知道的好像楼上都说了.不过我还是提一下建议:lz还是先学习一下sql的基础把,distinct在sql就能放一个地方吧。(如果你dropdownlist可以,ComboBox怎么不行了呢?思路一样的阿)
zhfj001 2006-08-31
  • 打赏
  • 举报
回复
第一个ComboBox绑定不用变,然后分别给ComboBox2和ComboBox3赋个默认值.
然后,ComboBox2和ComboBox3的SelectedChanges()事件中写查询语句。

你是这样做的吗?这样做肯定可以。
lanshifei 2006-08-30
  • 打赏
  • 举报
回复
至于你说的distinct怎么加的问题,例如:
public static DataSet 手机品牌()
{
return ExecuteSql("select distinct(手机品牌) from 手机");
}
lanshifei 2006-08-30
  • 打赏
  • 举报
回复
//这个是得到你要绑定的数据列
public DataSet ExecuteSql(string sqlstr)
{
this.ds= new DataSet();
this.da=new SqlDataAdapter();

try
{
this.sqlConnection1.Open();
sqlCommand1.CommandType = CommandType.Text ;
sqlCommand1.CommandText = sqlstr;
da.SelectCommand = this.sqlCommand1 as SqlCommand;
da.Fill(ds);
}
catch(Exception e)
{
throw new Exception(e.Message);
}
finally
{
da.Dispose();
this.sqlConnection1.Close();
}
return ds;
}




//对下拉框控制进行数据绑定
public static void BindCombobox(ComboBox cbb,DataTable dtb,string DispStr,bool IsReadonly)
{//string ValueStr,
if (dtb ==null) return;
cbb.DataSource = dtb;
cbb.DisplayMember =DispStr.Trim();
//cbb.ValueMember =ValueStr;
if (IsReadonly)
cbb.DropDownStyle = ComboBoxStyle.DropDownList;
else
cbb.DropDownStyle = ComboBoxStyle.DropDown;
}

kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
gezichong(鸽子虫) 大哥:
你的说法, 写这样一个select语句, 那等于就是说, 都不能直接通过图形化界面下的绑定解决了? 都要用各自的sql语句, 分别执行, 是这样吗? 在pageload时, 将第一个combobox中填充好项, 然后后面的combobox都在前一个combobox发生选项改变时完成sql查询, 是这样吗?

必须分别写三个sql, 对吗? 谢谢
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
你的意思是说, 把同一个物理表复制几份到几个dataset中, 然后分别绑定是吗? 我就想知道这样做的具体方法, distinct写在哪? 能不能具体说一下, 我才学1个月, 还很菜, 谢谢大哥,具体点
gezichong 2006-08-30
  • 打赏
  • 举报
回复
其它的两个ComboBox就如zhfj001(丫头)所说的那样,,用两次查询就可以了...
gezichong 2006-08-30
  • 打赏
  • 举报
回复
to:希望他在combobox的下拉列表中显示一次, 而不是很多次.
用你的这个表:
MC XH COLOR
NOKIA 3230 RED
NOKIA N70 RED
NOKIA N70 BLUE
NOKIA N72 BLUE
NOKIA N90 BLACK
MOTO U6 PINK
MOTO V3 YELLOW
String strSelect="select distinct MC from TableName"
再绑定到ComboBox1就可以了...
laladeng 2006-08-30
  • 打赏
  • 举报
回复
创建一个dataset,包括5个表,这些表是从你的物理表中选出来的,每个表一个字段,comboBox绑定到不同的表,这样在选择的时候就可以用distinct了
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
这么多分, 大哥们给点代码参考一下可以吗??
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
我要取同一个表中的数据, 怎么绑定到其他的表啊, 大师, 赐教啊. 我还真是不懂.
laladeng 2006-08-30
  • 打赏
  • 举报
回复
你把不同的comboBox绑定到不同的表
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
你没明白我的意思大哥, 我是说数据库中存在同名项怎么显示, 比如我上面例子中的都是NOKIA, 那么我只希望他在combobox的下拉列表中显示一次, 而不是很多次.
不是因为combobox中有冗余项.
laladeng 2006-08-30
  • 打赏
  • 举报
回复
在绑定之前先清除所有的项,然后绑定
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
up!
再帮我想想啊! 谢谢了!
kevinzhu59 2006-08-30
  • 打赏
  • 举报
回复
如楼上大侠所说, 还有个问题, 如果在第一个combobox就绑定的话, 怎么保证NOKIA只显示一次, 而不是许多次? 如果写sql语句可以用distinct来解决, 但是如此绑定怎么解决?
加载更多回复(9)

110,533

社区成员

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

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

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