请问在Combo的下拉列表中可以显示一个DataTable列表吗?

问题描述

请问在Combo的下拉列表中可以显示一个DataTable列表吗?

解决方案

解决方案二:
可以,但是需要自己来绘制ComboBox的下拉列表。
解决方案三:
可以,但是只可以绑定一列.
解决方案四:
可以通过继承该控件来做.如点击ComboBox则显示一个DataGrid
解决方案五:
是可以的。我以前写过一个,代码发给你:usingSystem;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Windows.Forms;namespaceLooongSoft{///<summary>///支持多列数据显示的ComboBox///</summary>publicclassMultiColumnComboBox:ComboBox{#regionvariablesprivateSystem.ComponentModel.Containercomponents=null;//确定哪些列显示出来privateint[]_displayColumns=null;//计算显示列的显示宽度privateint[]_displayWidths=null;//数据表privateDataTable_dtSource=null;//显示的数据行privateDataRow[]_drDisplay=null;//列与列之间的间隙privateint_columnSpacing=4;//是否是第一次初始化itemsprivatebool_needInitItem=true;//列分隔符privatebool_needSeperator=false;#endregion#regioninitializepublicMultiColumnComboBox(){if(components==null)components=null;this.DrawMode=System.Windows.Forms.DrawMode.OwnerDrawVariable;}#regionComponentDesignergeneratedcode/**////<summary>///RequiredmethodforDesignersupport-donotmodify///thecontentsofthismethodwiththecodeeditor.///</summary>privatevoidInitializeComponent(){}#endregion#endregion#regionInheritedeventsprotectedoverridevoidOnDrawItem(DrawItemEventArgse){try{intiIndex=e.Index;if(_drDisplay==null)return;if(iIndex>=_drDisplay.Length)return;if(iIndex>-1){intiXPos=0;intiYPos=0;if(_drDisplay.Length==0)return;e.DrawBackground();//处理分隔符intiLeftSpacing1=_columnSpacing/2;intiLeftSpacing2=_columnSpacing-iLeftSpacing1;for(intindex=0;index<_dtSource.Columns.Count;index++){if(!this.ColumnIsDisplay(index,_displayColumns))continue;intidwIndex=GetColumnIndexOfArray(_displayColumns,index);intidw=idwIndex==-1?80:_displayWidths[idwIndex];e.Graphics.DrawString(_drDisplay[iIndex][index].ToString(),Font,newSolidBrush(e.ForeColor),newRectangleF(iXPos,e.Bounds.Y,idw,ItemHeight));//iXPos+=idw+iLeftSpacing1;if(NeedSeperator){if(index!=0&&index!=_dtSource.Columns.Count-1){//e.Graphics.DrawString(Seperator,Font,newSolidBrush(e.ForeColor),newRectangleF(iXPos+idw+iLeftSpacing1,e.Bounds.Y,iLeftSpacing1,ItemHeight));e.Graphics.DrawLine(newPen(e.ForeColor),newPointF(iXPos+idw-iLeftSpacing1,iIndex*ItemHeight),newPointF(iXPos+idw-iLeftSpacing1,(iIndex+1)*ItemHeight));}}iXPos+=idw;}iXPos=0;iYPos+=ItemHeight;e.DrawFocusRectangle();base.OnDrawItem(e);}}catch(Exceptionex){thrownewException(ex.Message+"rnInColumnComboBox.OnDrawItem(DrawItemEventArgs).");}}
解决方案六:
protectedoverridevoidOnDropDown(EventArgse){if(_needInitItem){InitItems();_needInitItem=false;}InitDisplay();base.OnDropDown(e);}protectedoverridevoidOnDataSourceChanged(EventArgse){base.OnDataSourceChanged(e);InitDisplay();}#endregion#regionProperty[Category("MultiColumn")][Description("显示的列,分别用对应列的index来表示.")]publicint[]DisplayColumns{get{return_displayColumns;}set{_displayColumns=value;}}[Category("MultiColumn")][Description("显示的数据")]publicDataTableData{get{return_dtSource;}set{DataSource=value;_dtSource=value;}}[Category("MultiColumn")][Description("不同列之间是否需要分隔符")]publicboolNeedSeperator{get{return_needSeperator;}set{_needSeperator=value;}}#endregion#regionprivatemethodsprivateboolColumnIsDisplay(intcolumn,int[]columns){if(column<0)thrownewException("columnmustbegreaterthan0.rn(privatemethod)ColumnIsDisplay(int,int[])");if(columns==null){columns=newint[1];columns[0]=0;}elseif(_dtSource!=null){if(columns.Length>_dtSource.Columns.Count)thrownewException("DisplayColumns'countcannotbegreaterthancountofdatasource.rn(privatemethod)ColumnIsDisplay(int,int[])");}foreach(intcincolumns){if(c==column)returntrue;}returnfalse;}privateintGetColumnIndexOfArray(int[]columns,intcolumn){intiResult=-1;if(column<0)thrownewException("columnmustbegreaterthan0.rn(privatemethod)ColumnIsDisplay(int,int[])");if(_dtSource!=null){if(columns.Length>_dtSource.Columns.Count)thrownewException("DisplayColumns'countcannotbegreaterthancountofdatasource.rn(privatemethod)ColumnIsDisplay(int,int[])");}for(intc=0;c<columns.Length;c++){if(columns[c]==column)returnc;}returniResult;}privatevoidInitDisplay(){_displayWidths=newint[_displayColumns.Length>0?_displayColumns.Length:1];SizeFsize=newSizeF(10000,ItemHeight);Graphicsgraphics=CreateGraphics();foreach(DataRowdrinthis._drDisplay){for(inti=0;i<this._dtSource.Columns.Count;i++){intiexist=this.GetColumnIndexOfArray(_displayColumns,i);if(iexist!=-1){stringstmp=dr[i].ToString();intitmpwidth=(int)graphics.MeasureString(stmp,Font,size).Width;if(itmpwidth>_displayWidths[iexist])_displayWidths[iexist]=itmpwidth;}}}graphics.Dispose();intiwid=0;for(intw=0;w<_displayWidths.Length;w++){_displayWidths[w]+=_columnSpacing;iwid+=_displayWidths[w];}DropDownWidth=1;if(iwid>Width)Width=iwid;}privatevoidInitItems(){_drDisplay=_dtSource.Select();}#endregion}}

时间: 2024-11-08 20:24:28

请问在Combo的下拉列表中可以显示一个DataTable列表吗?的相关文章

iphone-在所有栏中只显示一个视图

问题描述 在所有栏中只显示一个视图 在UITabViewController的所有栏中只显示一个视图(UIButton). 应该怎么实现呢? 比如info按钮在栏中一直显示,不用将它添加到xib或重写代码. 解决方案 执行一个Tab Bar Controller类,在viewDidLoad方法中,循环遍历全部Tab Bar View Controllers添加按钮. - (void)viewDidLoad { [super viewDidLoad]; for(UIViewController *

jquery查询显示一个select列表怎么写呢

问题描述 jquery查询显示一个select列表,在jsp页面嵌入一段js:<script type="text/javascript"> getCatList(); </script>然后getCatList去数据库查询分类列表,显示回来一个select框该怎么写呢. 解决方案 你是想用ajax取得数据?那你可以这样: $.ajax({ type: "POST", url: "你的action地址", data: {参

工具条组合combo控件,下拉控件中的显示字体可以自定义么?

问题描述 工具条组合combo控件,下拉控件中的显示字体可以自定义么? 工具条组合combo控件,下拉控件中的显示字体可以自定义么?怎么让字体设置为所显示的文字的字体呢? 解决方案 有一个叫做fontcombo的第三方控件直接就支持了.

百度-请问php中去读取一个php文件然后显示在前台,怎么做啊?

问题描述 请问php中去读取一个php文件然后显示在前台,怎么做啊? 如题,百度说用include.但是没有demo我不知道如何写,谁有demo或者例子能分享一下吗? 解决方案 file get content函数试试 解决方案二: file get content函数试试

mfc-想在MFC中显示一个开关按钮,请问怎么实现

问题描述 想在MFC中显示一个开关按钮,请问怎么实现 MFC怎么制作开关按钮,按下去保持凹的状态,再按一次才凸出来,有没有简单的方法,网上的代码看不懂 解决方案 你可以用checkbox控件,设置为push button外观 解决方案二: 设置按钮属性,push button 解决方案三: 自己绘画控件还是挺好玩的,可以用一个成员变量来保存按钮的当前状态啊,

请问awk和python中如何显示当天产生的日志?

问题描述 请问awk和python中如何显示当天产生的日志? #coding=utf-8 import os import json import httplib import codecs LogFile='/etc/httpd/logs/access_log' #日志 logMess='/tmp/acc.log' if os.path.isfile(logMess): os.system('cp /dev/null %s'% logMess) file=codecs.open(logMess

vs中编写了一个会显示水平和竖直滚动条的程序,但是运行时出现错误的结果,请问这是为啥?

问题描述 vs中编写了一个会显示水平和竖直滚动条的程序,但是运行时出现错误的结果,请问这是为啥? 这是源代码: #include #include"resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { static

javascript实现在下拉列表中显示多级树形菜单的方法_javascript技巧

本文实例讲述了javascript实现在下拉列表中显示多级树形菜单的方法.分享给大家供大家参考.具体如下: 这里演示在下拉列表框中显示分级的菜单,在很多网站都可以看到的效果,很实用,下拉列表框中的选项是利用JS控制输出,如果你有更好的办法不用JS来显示,那最好了,因为像这种菜单用JS来实现,多多少少有点麻烦. 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

DropDownList 控件,下拉列表中如何只显示最近常用的选项,不常用的选项点击其他后展开

问题描述 由于DropDownlist的下拉选项非常多,选择起来查找费事,如何让其选项中只显示近期使用过的选项,没有用过的选项用"其他"代替,当点击其他后所有可供选择的选项展开 解决方案 解决方案二:这种情况你要自己实现类似下拉列表效果,或者filter效果,这种类型的效果大大的有,jquery解决方案三:能具体点给个代码嘛谢谢啦解决方案四:搜索jquery输入过滤下拉列表解决方案五:找插件把.原生的Select已经不能满足你了解决方案六:你可以找找.net最近最常使用(LFU)算法的