重写combobox可以实时搜索datatable数据源,并多列显示,加入到datagridview中第一列,如何选中一项更改datagridview当前行数据

问题描述

急求大神们%>_<%publicpartialclassNewCombox:ComboBox{publicintcolumnPadding=5;privateDataGridViewDGV;publicfloat[]columnWidths={50,150,100};//项宽度publicString[]columnNames={"title_id","au_id","au_ord"};//项名称publicintvalueMemberColumnIndex=0;//valueMember属性列所在的索引privateDataTabledataTable=newDataTable("Student");publicstringvalueText="";publicDataTablepubtable=newDataTable();publicNewCombox(DataGridViewdgv){this.DGV=dgv;InitializeComponent();this.AutoCompleteMode=System.Windows.Forms.AutoCompleteMode.Suggest;this.DrawMode=DrawMode.OwnerDrawVariable;//手动绘制所有元素this.DropDownHeight=60;//自己设置下拉框最长到多长显示滚动条this.IntegralHeight=false;InitItems();}publicNewCombox(stringvaluetext){this.valueText=valuetext;InitializeComponent();this.DropDownHeight=30;//自己设置下拉框最长到多长显示滚动条this.IntegralHeight=false;InitItems();}privateDataTableCreateDataTable(strings){SqlConnectionconn=newSqlConnection(@"server=2012-20140123spsqlexpress;userid=sa;password=zr199406;database=publish");SqlDataAdapterdapt2;DataSetds=newDataSet();stringsql2;sql2="selecttitle_id,au_id,au_ordfromdbo.titleauthorwheretitle_idlike'"+s.Replace("'","''")+"%'";if(s==null||s==""){sql2="selecttitle_id,au_id,au_ordfromdbo.titleauthorwheretitle_idlike'"+s+"%'";//可以把s改成你想要的默认值}dapt2=newSqlDataAdapter(sql2,conn);dapt2.Fill(ds,"table1");DataTabledtable=newDataTable();dtable.Columns.Add("title_id",typeof(System.String));dtable.Columns.Add("au_id",typeof(System.String));dtable.Columns.Add("au_ord",typeof(System.String));//dtable.Columns.Add("royaltyper",typeof(System.String));dtable=ds.Tables["table1"];returndtable;}//获取相应的数据tablepublicvoidInitItems(){dataTable=CreateDataTable(this.valueText);pubtable=dataTable;this.DataSource=dataTable;this.DisplayMember="title_id";this.ValueMember="title_id";if((this.DataSource!=null)&&(!string.IsNullOrEmpty(this.DisplayMember))){if(!string.IsNullOrEmpty(this.Text)){DataViewdv=dataTable.DefaultView;dv.RowFilter=string.Format("title_idlike'{0}%'",this.valueText);DataTableNewDt=dv.ToTable("newTableName");DataTablecopyTable=newDataTable();copyTable.Columns.Add("title_id",Type.GetType("System.String"));copyTable.Columns.Add("au_id",Type.GetType("System.String"));copyTable.Columns.Add("au_ord",Type.GetType("System.String"));//copyTable.Columns.Add("royaltyper",Type.GetType("System.String"));copyTable.Rows.Add(newobject[]{"title_id","au_id","au_ord"});for(inti=0;i<NewDt.Rows.Count;i++){copyTable.Rows.Add(newobject[]{NewDt.Rows[i][0].ToString()+"t",NewDt.Rows[i][1].ToString()+"t",NewDt.Rows[i][2].ToString()+"t"});}//copyTable.Rows.Add(newobject[]{this.valueText,"","",""});this.DataSource=copyTable;pubtable=copyTable;}else{this.DataSource=dataTable;pubtable=dataTable;}this.DropDownWidth=(int)CalculateTotalWidth();//计算下拉框的总宽度}}privatefloatCalculateTotalWidth(){columnPadding=5;floattotalWidth=0;foreach(intwidthincolumnWidths){totalWidth+=(width+columnPadding);}returntotalWidth+SystemInformation.VerticalScrollBarWidth;}protectedoverridevoidOnDrawItem(DrawItemEventArgse){base.OnDrawItem(e);if(DesignMode){return;}RectangleboundsRect=e.Bounds;//获取绘制项边界的矩形e.Graphics.FillRectangle(Brushes.White,e.Bounds);if(e.State==DrawItemState.Selected){//thiscodekeepsthelastitemdrawnfromhavingaBisquebackground.e.Graphics.FillRectangle(Brushes.Bisque,e.Bounds);}intlastRight=0;using(PenlinePen=newPen(SystemColors.GrayText)){using(SolidBrushbrush=newSolidBrush(ForeColor)){if(columnNames.Length==0){e.Graphics.DrawString(Convert.ToString(Items[e.Index]),Font,brush,boundsRect);}else{//循环各列for(inti=0;i<columnNames.Length;i++){stringitem=Convert.ToString(FilterItemOnProperty(Items[e.Index],columnNames[i]));boundsRect.X=lastRight;//列的左边位置boundsRect.Width=(int)columnWidths[i]+columnPadding;//列的宽度//lastRight=boundsRect.Right;if(i==valueMemberColumnIndex)//如果是valuemember{using(Fontfont=newFont(Font,FontStyle.Bold)){//绘制项的内容e.Graphics.DrawString(item,font,brush,boundsRect);}}else{//绘制项的内容e.Graphics.DrawString(item,Font,brush,boundsRect);}//绘制各项间的竖线if(i<columnNames.Length-1){e.Graphics.DrawLine(linePen,boundsRect.Right,boundsRect.Top,boundsRect.Right,boundsRect.Bottom);}}}}}e.DrawFocusRectangle();}protectedoverridevoidOnKeyUp(KeyEventArgse){this.valueText=this.Text;InitItems();this.DroppedDown=true;if(this.Text!=null&&this.Text!=string.Empty){//获得光标位置this.Text=this.valueText;this.SelectionStart=this.Text.Length;}this.Cursor=Cursors.Default;base.OnKeyUp(e);}}已经可以动态显示,并且加入到datagridview里面,但是选中某一行数据之后,没有办法更改所在单元格和这一行的数据怎么办??谢谢大家了!!

解决方案

解决方案二:
问题没描述清楚?代码多,但又不全?各个函数的关系的代码?

时间: 2024-10-24 05:12:39

重写combobox可以实时搜索datatable数据源,并多列显示,加入到datagridview中第一列,如何选中一项更改datagridview当前行数据的相关文章

c#-求助筛选datatable中第一列满足最后两位相等的所有数据

问题描述 where后面写不好,麻烦大神们帮忙privatevoidbtnaabb_Click(objectsender,RoutedEventArgse){try{IEnumerable<DataRow>result=fromdatainmainTable.AsEnumerable()whereselectdata;mainTable=mainTable.Clone();intcount=0;foreach(DataRowdrinresult){mainTable.Rows.Add(dr.I

在ASP.NET中使用AJAX实时搜索功能控件--RealTimeSearchMonitor

Web Client Software Factory v2.0包含了一个RealTimeSearchMonitor控件 提供实时搜索功能 来帮助你在ASP.NET中使用ASP.NET AJAX 局部更新网页. 此文章帮助你 如何在ASP.NET 中使用 RealTimeSearchMonitor控件,数据来自Northwind数据库的Customers表,数据访问是用企业库写的,当然你也可以使用别的任何方式返回数据源,,不过不用企业库写个SQL语句还真是够复杂!!! 先决条件 使用realti

百度上线新浪微博实时搜索 给互联网带来哪些变化

Admin5站长网消息,3月1日晚,百度整合新浪微博内容的实时搜索服务上线.百度在其搜索结果中实时显示与关键词相关的最新新浪微博内容.这是新浪微博首次和第三方搜索引擎合作.站长网编辑发现,新浪微博页面右侧显示的热门话题,通过百度搜索关键词均可获得新浪微博的搜索结果.而搜索一些新闻.突发事件的关键词,新浪微博内容也将呈现在百度最新微博搜索结果当中.可见目前百度已经正式开放对新浪微博的实时搜索.     目前百度市场份额已经超过谷歌,成为国内最大的搜索引擎,是网民最大的上网需求入口.随着近三年的发展

惊喜 百度上线新浪微博实时搜索

百度整合新浪微博内容的实时搜索服务上线.百度在其搜索结果中实时显示与关键词相关的最新新浪微博内容.这是新浪微博首次和第三方搜索引擎合作.站长网编辑发现,新浪微博页面右侧显示的热门话题,通过百度搜索关键词均可获得新浪微博的搜索结果.而搜索一些新闻.突发事件的关键词,新浪微博内容也将呈现在百度最新微博搜索结果当中.可见目前百度已经正式开放对新浪微博的实时搜索.     目前百度市场份额已经超过谷歌,成为国内最大的搜索引擎,是网民最大的上网需求入口.随着近三年的发展,国内微博也日趋火爆.新浪微博也已经

DataGridView中绑定DataTable数据及相关操作实现代码_实用技巧

复制代码 代码如下: DataTable DT = new DataTable(); DT.Columns.Add("Name"); DT.Columns.Add("Sex"); DataRow dr = DT.NewRow(); dr[0] = "Kenny"; dr[1] = "男"; DT.Rows.Add(dr); A:在DataGridView控件的列编辑中将DataPropertyName属性设为DataTable

数据源绑定的datagridview和combobox如何实时更新数据

问题描述 数据源绑定的datagridview和combobox如何实时更新数据 经过绑定,数据源更新后,空间里的数据并不能及时更新,要重新打开窗口才可!

行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 2

标签 PostgreSQL , ES , 搜索引擎 , 全文检索 , 日志分析 , 倒排索引 , 优化 , 分区 , 分片 , 审计日志 , 行为日志 , schemaless 背景 在很多系统中会记录用户的行为日志,行为日志包括浏览行为.社交行为.操作行为等. 典型的应用例如:数据库的SQL审计.企业内部的堡垒机(行为审计)等. 前面写了一篇最佳实践,通过PostgreSQL来存储审计日志,同时对审计日志需要检索的字段建立全文索引. SSD机器可以达到7万/s的写入(换算成全文索引条目,约28

C# 重写ComboBox实现下拉任意组件的方法_C#教程

一.需求 C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉. 二.设计 基本思路:重写ComboBox,将原生的下拉部分屏蔽,使用toolStripDropDown制作下拉弹出 三.问题解决 1. 问题:toolStripDropDown中放toolStripControlHost时会有边框产生,同时CheckedListBox的duck为full时底端会有很大空白 解决: toolStripControlHos

实时搜索专家Krzana正式进军金融大数据市场

通过与以能源为重点的对冲基金和股市观察家签署联盟协议,来自伦敦的实时搜索专家Krzana正在金融数据市场掀起一场巨浪. 对冲基金对数据有着迫切的需求,因为他们希望对相关信号作出迅速实时的交易反应.而Krzana的出现满足了他们的需求,通过一个简单易用的仪表板,Krzana用户就可以轻松实现对新闻.社交媒体.RSS.博客和图片信息的过滤和筛选. 该平台现在每天可以处理近5亿条推文.通过这个高效的过滤器系统(如强大到足以处理实时数据流),用户可以自行决定相关数据,在数据筛选方面成功实现"少而精&qu