说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在winform中,请教关于combobox的一个小问题

编辑:说三道四文库 发布时间:2017-12-14 12:56
HTML文档下载 WORD文档下载 PDF文档下载
请问,当combobox无法找到数据源时,如何给他的item进行添加,添加时需要添加相应的text和value.
另外,datagrid的selectindexchange的事件在winform中是怎么样的?
分不够可以再加
绑定:
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=kyserver;database=hos;uid=sa;password=");
conn.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("select * from Hr_dept",conn);
dt = new System.Data.DataSet();
da.Fill(dt,"CMMNUMST");

 dv = new DataView(dt.Tables[0]);
this.dataGrid1.DataSource = dv;
this.comboBox1.DataSource = dv;
this.comboBox1.DisplayMember = "stuno";
手工添加
foreach(DataRow dr in dt.Tables[0].Rows)
{
this.comboBox1.Items.Add(dr[0].ToString();
}
我不建议将combobox和数据源绑定,通常都是取得一个两个字段的记录集,再添到combobox,当然取记录集和添到控件的操作都写到公共类的方法里;
datagrid的selectindexchange的事件在winform中是怎么样的?我不知道你是想知道些什么,只能告诉你,很好用
我在winform中的datagrid,找不到这个selectindexchanged事件,是不是她使用别的名字?

另外,关于combobox,我不能进行绑订,因为我没有数据源,当然,应该是可以手工建立数据源的,我现在从文件中读出满足条件的内容,希望内容A能作为combobox项的text,内容B却作为combobox的valu。
有两种方式可以填充 ComboBox 和 ListBox 控件。

例如,通过使用 Items 方法可以向 ComboBox 添加对象。也可以通过用 DataSource、DisplayMember 和 ValueMember 属性填充 ComboBox 来向 ComboBox 添加对象。

当combobox无法找到数据源时,这是什么意思?

datagrid的selectindexchange的事件在winform中,好像没有这个东西?
// Populates the list box using DataSource. 
         // DisplayMember is used to display just the long name of each state.
         ArrayList USStates = new ArrayList()   ;
         USStates.Add(new USState("Alabama", "AL"));
         USStates.Add(new USState("Washington", "WA"))  ; 
         USStates.Add(new USState("West Virginia", "WV"));
         USStates.Add(new USState("Wisconsin", "WI")) ;
         USStates.Add(new USState("Wyoming", "WY"));

         ListBox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged);
         ListBox1.DataSource = USStates ;
         ListBox1.DisplayMember = "LongName"     ;
         ListBox1.ValueMember = "ShortName" ;
[C++, JScript] 没有可用于 C++ 或 JScript 的示例。若要查看 Visual Basic 或 C# 示例,请单击页左上角的语言筛选器按钮 。



这是在帮助中的一部分示例代码,或许对你有帮助
为大家提供一套我写的公共类的方法,可以方便的将记录集添加到控件ComboBox,ListBox 中

/// --------------------------------------------------
///             FillItemsByDataset()
/// --------------------------------------------------            
/// 方法功能:
/// 将数据集合中的数据添加到ComboBox ListBox
/// 入口参数:
///         sender: 控件对象(ComboBox,ListBox)
///         ds:DataSet数据集(前两个字段分别为对象的DisplayMember,ValueMember对应值)
/// 出口参数:
/// 无
/// 全局变量:
/// 无
/// WEB 注释:
///         <summary>将数据集合中的数据添加到ComboBox ListBox</summary>
///         <param name="sender">控件对象(ComboBox,ListBox).</param>
///         <param name="ds">DataSet数据集(前两个字段分别为对象的DisplayMember,ValueMember对应值)</param>
///         <returns>正常装入目标控件返回 true,出错返回 false</returns>
///         <remarks></remarks>
/// --------------------------------------------------
public bool FillItemsByDataset(object sender,DataSet ds)
{
if (ds==null||ds.Tables.Count==0)
{
return false;
}
try
{
switch(sender.GetType().ToString())       
{         
case "System.Windows.Forms.ComboBox":  
System.Windows.Forms.ComboBox cb = (System.Windows.Forms.ComboBox) sender;
cb.Items.Clear();
cb.DataSource=ds.Tables[0].DefaultView;
cb.DisplayMember=ds.Tables[0].Columns[0].ToString();
cb.ValueMember=ds.Tables[0].Columns[1].ToString();
break; 
case "System.Windows.Forms.ListBox":  
System.Windows.Forms.ListBox lb = (System.Windows.Forms.ListBox) sender;
lb.Items.Clear();
lb.DataSource=ds.Tables[0].DefaultView;
lb.DisplayMember=ds.Tables[0].Columns[0].ToString();
lb.ValueMember=ds.Tables[0].Columns[1].ToString();
break; 
default:            
break;  
}
}
catch(System.Exception Err)
{
mstcErrorInfo.Description=Err.Message;
return false;
}
ds.Dispose();
return true;
}
问题是这样的,我有这么一个xml文件
<HotelDescript>
     <HotelNB>
        <AuthNB>YES</AuthNB>
        <HotelNameNB>name3</HotelNameNB>
        <HotelCodeNB>code3</HotelCodeNB>
     </HotelNB>
     <HotelNH>
        <AuthNH>NO</AuthNH>
        <HotelNameNH>name2</HotelNameNH>
        <HotelCodeNH>code2</HotelCodeNH>
     </HotelNH>
     <HotelTZ>
        <AuthTZ>YES</AuthTZ>
        <HotelNameTZ>name1</HotelNameTZ>
        <HotelCodeTZ>code1</HotelCodeTZ>
     </HotelTZ>
  </HotelDescript>
然后,我在代码中根据一系列条件取读取这个xml(当然这个xml文件中只有上面显示的部分是我所需要的,其他未显示的还有很多),并把读出来的放到combobox中,code作为value,name作为text。
private struct selNameValue
{
public string sName;
public string sValue;
public selNameValue(string sParaName, string sParaValue)
{
this.sName  = sParaName;
this.sValue = sParaValue;
}
public string Name
{
get
{
return this.sName;
}
}
public string Value
{      
get
{
return this.sValue;
}
}
public override string ToString()
{
return this.Name + " - " + this.Value;
}
}

//构造函数中
// Populates the list box using DataSource. 
// DisplayMember is used to display just the long name of each state.
ArrayList ArrSrc = new ArrayList();
ArrSrc.Add(new selNameValue("Text1", "1"));//此处传值name,code
ArrSrc.Add(new selNameValue("Text2", "2")) ; 
ArrSrc.Add(new selNameValue("Text3", "3"));
this.comboBox1.DataSource = ArrSrc;
this.comboBox1.DisplayMember = "Name";//selNameValue结构中的属性
this.comboBox1.ValueMember = "Value"; //selNameValue结构中的属性

private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (this.comboBox1.SelectedIndex != -1)
MessageBox.Show(this.comboBox1.SelectedValue.ToString());
}
为什么我的combobox和datagrid就是绑不上去呢?
private void BindGrid()
{
  string code = this.CBBcode;
  DataSet ds = this.DsAll;
  DataView dv = ds.Tables[0].DefaultView;
  dv.RowFilter="HotelCode='"+code+"'"; 
  this.dgRoomType.DataSource = dv;
  if (dv.Count > 0)
  {
     this.dgRoomType.Select(0);
     string type = this.dgRoomType[0,0].ToString();
     this.DtRow = ds.Tables[0].Select("HotelCode='"+code+"' and Type='"+type+"'")[0];
     this.ShowType();
  }
  else
  {
     this.btnDelete.Enabled = false;
     this.ClearShow();
   }
}

这里是combobox部分:
private void BindCombobox()
{
DataSet dsXml = new DataSet();
dsXml.ReadXml(@"hotel.xml");
this.cbbHotel.DataSource = dsXml.Tables[0];
this.cbbHotel.DisplayMember = dsXml.Tables[0].Columns[1].ColumnName;
this.cbbHotel.ValueMember = dsXml.Tables[0].Columns[0].ColumnName;
}
up
combobox部分帮定不上去是因为DataSet的内部实现引起的
DataSource 与DisplayMember、ValueMember属性设置存在紧密关系。
你可以照搬我用的selNameValue结构
然后
private void BindCombobox()
{
DataSet dsXml = new DataSet();
dsXml.ReadXml(@"hotel.xml");
ArrayList ArrSrc = new ArrayList();
for (int i=0;i<dsXml.Tables[0].Rows.Count;i++)
{
ArrSrc.Add(new selNameValue(dsXml.Tables[0].Rows[i,1].ToString(), dsXml.Tables[0].Rows[i,0].ToString()));//此处传值name,code
}
this.cbbHotel.DataSource = ArrSrc;
this.cbbHotel.DisplayMember = "Name";//selNameValue结构中的属性
this.cbbHotel.ValueMember = = "Value"; //selNameValue结构中的属性
}
我完全使用你的方法,为什么在运行到这一句
this.cbbHotel.ValueMember = = "Value"; //selNameValue结构中的属性

报错“未将对想引用蛇值到对象实力”
但是我新建一个windowsapplication,用你的方法就是好的,真奇怪。
dataGrid1.SetDataBinding(dataset.Tables[0],"");
to lansluo:
未将对象引用设置到对象实例。
I'm sorry!
this.cbbHotel.ValueMember = = "Value"; //selNameValue结构中的属性
-->
this.cbbHotel.ValueMember = "Value"; //selNameValue结构中的属性
New_bug(Chen)另开贴感谢。
现代Objective-C七宗罪 Google工程总监Ray Kurzweil意欲打造“虚拟朋友” 惠普开源JavaScript框架Enyo更新:支持桌面和移动平台 分析:三星或将成为科技行业第五巨头 是真的 诺基亚真有可能推Android手机 如何打造IE10的指尖触碰式用户体验 SUSE全球OEM联盟总监:为何SAP HANA只选择SUSE? 推荐2013年最佳PHP开发框架 Patrick Wyatt:代码没问题 程序却有bug? NoSQL的可靠性及扩展操作 最新Skype加密技术:“无声”通话能躲过FBI监听 谷歌锁死SDK,能阻止Android碎片化吗? KitCam团队专访:为应用做加法也能雄踞榜首 谷歌哭了:Replicant 4.0 SDK发布搅乱大局 忍者神龟与禅宗启示:如何突破移动广告困境 Linux会是更好的游戏平台?暴雪是这么认为的! 新型恶意软件瞄准Java服务器 AWS被纳为“战略物资”市值或可达到300亿美元? 十张图带你入门Map/Reduce 低端Android野心,Intel发布Atom Z2420处理器 淘宝网的技术发展史(一)——个人网站时代 看Pinterest如何通过架构变化将EC2成本降低了62% 内容vs渠道:法国电信商Free叫板Google 让网站成为应用:Firefox OS掀起革命风潮 屌丝伞兵的逆袭:4人+盛大+远程+最佳手游 新年头彩:Chartboost喜获1900万美元融资 高富帅跻身移动领域 福特开放车载声控API 传低端iPhone最低只要99美元 你怎么看? 辉煌不再 Encanto超级计算机可能被拆分“出售” 知己知彼 企业应用移足云端必须清楚的10大方面 NVIDIA推Android掌机:七年孕育可否成就野心? ORACLE的服务都启动了,可连数据库时发生"oracle not available" WinForm内treeView的右键焦点问题,是.NET的bug吗? 查找字符问题!! dataset问题?请求各位帮忙 求两段关于层的代码~~ 想买彩票!!!想中奖!!!!!!!!!!!!! 为何DropDownList中内容在提交后丢失? 小弟编写了一个实时传送信息软件。遇到一个小问题。请高手解答。--附服务端源代码 如何判断当前用户的计算机是否在网上? [高分求救]如何判断这个表单里有多少个字段要作答和每个字段是否都已经做答了(也就是值不为空),在线等待! 调试精通EJB2中的CMP例子时在finder方法中EJB-QL都出现这种编译错误,如何是好? 关于web表格控件的问题(急着给大家送分哦,快快!) 菜鸟问题 关于Struts 基础知识的简单问题 开发查询程序时能不能使用DataView来过滤或排序? 不能忍受北京这个城市了。我要离开这里。 一个关于DROP TABLE的问题? 小弟编写了一个实时传送信息软件。遇到一个小问题。请高手解答。--附客户端源代码 帮忙 关于数据库,请教高手! now()取得的是客户端的还是服务器端的时间? 一个用iframe动态调用其他页面的问题,在线等待! XP、2000启动后有一段“休克”期应该怎么解决? 一个奇怪的问题:如何注册BCB6??? servlet怎么得到访问者的ip地址?或者是从那个页面链接过来的? 高手留步 ! 怎样取代系统默认行为 ? 求阶乘的代码,,书上抄的,怎么又有错呀, mysql 3.x.x好像不支持事务,这么办啊? --------用联通手机的兄弟请进来领分!!!-------(续) socket通讯与操作系统有关系吗? 程序员里有多少买了车的? 请高手帮忙 有什么好的VC打包工具吗? 请问如何让程序自动运行?并且如何取消程序的自动运行? 两个问题求助~~~~~~~~~~~~~~~~~~~~ 关于同一台计算机两个id的邮件配置问题 在一个datawindow中放了多个button,如何针对每一个Button进行编程? 派生类的三种继承方式 高薪诚聘 C# 程序员 一个有关失效率的问题,请大侠们指点! sun的j2ee sdk 1.3.1不能在2000server上运行?? [黑色幽默]唉 难道这就是IT人的未来? 几个项目开发问题,有经验者请进。 關於用vb取sybase數據的問題 如何实现呢?请教各位高手,高高手。。。 急。死。问一下UDP的写的一个NETICQ的使用方法.在线等 初学JSP,在用JavaBean创建了一个数据库连接的程序,但是在JSP中用<jsp:useBean>使用JavaBean时出现了问题。 我是新手,一个工程换目录了需要改哪些地方? listview控件网格的高度如何设置啊? 请问TFORM 中的onActivate 事件是在什么时候触发 help 关于菜单 各自安好前面一句是互不打扰么? 各自安好互不打扰,岂不美哉? “雷人”是什么意思啊?拜托各位了 3Q 马尔代夫的地理面积有多大? 马尔代夫国土面积多大? 马尔代夫哪些岛屿面积较大 吃西瓜最雷人的吃法是什么?3Q 什么叫三公一金 张三公怎么样 安好是什么意思 我女朋友把我们网名改成:互不打扰 各自安好 “中国西藏文化周”在德国柏林开幕 俞冷空气今晚降临杭城 早出晚归的人出门柳岩顶寒风爆乳露背装性感出席优雅盛典众女星冒零度严寒抛胸露背出席优雅盛典日本外务省网上传播争岛视频 引发中韩中关村被卡女子确认脑死 家属否认其有美国称全美近600只宠物疑因食用中国北京脖子卡护栏女子脑死亡 家属称不相慈溪公司老总险被绑架 主谋是自己昔日垂涎女孩美色 男子宁波当街袭胸总在肯德基过夜的流浪女诞下龙凤胎 帮到城里休闲不习惯 回家养竹鼠奔富路她做鸡21次只为一场修行手绘食谱:一口南瓜饭下肚,整个人都文金立超级续航 M5 Plus发布有哪次新股新一轮妖股爆发 一只小盘热点概恶搞小丸子重磅来袭内涵神评论:原来女厕所长这样,第一次内涵段子五星好评送红包!给你10个不订北京商报的理由加拿大卡尔加里冰球队有一个神奇的传统原来这种场景真的会发生在现实。。。仙人是怎样炼成的战气昂然噬柳仙盆未央游记天门圣徒汉魄星夜思网游之神魔空间异世巫妖技能穿越修真记正大光明逢甲夜市旅游九族文化村旅游伊达邵码头旅游小湾旅游国立海洋生物博物馆旅游砂卡礑步道旅游龙王庙行宫旅游安亭老街旅游碧沽天池旅游易俗社剧场旅游洛阳古墓博物馆旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘