C#.Net
文章平均质量分 63
丛晓男
这个作者很懒,什么都没留下…
展开
-
修改Datagridview并保存到数据库
第一,确保数据库的表设置了主键; private void button3_Click(object sender, EventArgs e) { DataTable dtTmp = new DBConnection(Application.StartupPath + @"\GTAPbyGAMS3-3(2)\data\InitialDa原创 2012-03-01 11:40:22 · 4899 阅读 · 2 评论 -
ComboBox的DataSource设置即相关属性
ComboBox,SelecteText,SelectedValue,DataSource原创 2010-06-21 17:45:00 · 9765 阅读 · 1 评论 -
Datatable的按列排序排序
Datatable,排序原创 2010-06-24 10:29:00 · 3709 阅读 · 0 评论 -
树的孩子兄弟存储结构
树,孩子兄弟存储结构原创 2010-06-14 20:44:00 · 2004 阅读 · 0 评论 -
树的孩子链表存储结构
树,孩子链表原创 2010-06-14 11:07:00 · 3590 阅读 · 1 评论 -
二叉树的二叉链表存储结构
二叉树,二叉链表原创 2010-06-13 20:42:00 · 1905 阅读 · 0 评论 -
多线程+代理操作控件
多线程,控件,进度原创 2010-08-05 19:41:00 · 1553 阅读 · 0 评论 -
IrisSkin2皮肤的使用
功能比较强大,效果很好,使用也比较简单。目前全面支持C#2.0,3.0以上部分控件不支持。仅需几行代码:private Sunisoft.IrisSkin.SkinEngine skinEngine1;this.skinEngine1 = new Sunisoft.IrisSkin.SkinEngine(((System.ComponentModel.Component)(this)原创 2010-05-11 15:49:00 · 1136 阅读 · 1 评论 -
不同集合含有相同元素时不能使用链表
如果集合有重叠元素,比如总人口集合、男性集合、女性集合,那么对这三个集合的表示,要谨慎使用链表。如下图: 注意,上面图中,使用的是Add(Node),而非使用Add(Value),两者有重大区别,前者,三条链表类共同修改一个链表,内存占用少,但是集合一旦有重叠就会引起错乱,后者每Add(Value)一次,就会重新new一个新的结点(查看Add原创 2010-05-11 09:30:00 · 954 阅读 · 0 评论 -
集合遍历时删除和增加元素
大多数时候,遍历集合元素的时候并不需要对元素进行增加或者删除操作,但有些时候则需要,比如,如果集合中盛放的元素是社会上所有的人,那么有人死亡则元素删除,有人出生则是集合元素的增加。对于这种情况,遍历不能按照原来那种方式去做了,而且C#中的集合对于这类有增删动作的遍历,也不支持foreach循环。有三种办法可以解决这一问题。 第一种方法:使用C#的LinkedList双链表原创 2010-05-09 17:23:00 · 5668 阅读 · 0 评论 -
窗体位置的起始位置
窗体,位置原创 2010-06-22 18:46:00 · 2442 阅读 · 0 评论 -
递归回溯法排序
回溯法,排序原创 2010-08-21 16:50:00 · 892 阅读 · 0 评论 -
推荐好用的免费.net第三方控件 Krypton Toolkit
下载地址:http://www.componentfactory.com/download安装后控件栏出现Krypton Toolkit控件库。原创 2012-01-04 11:05:42 · 6572 阅读 · 0 评论 -
DataGridView右键单击弹出菜单并选中行
要求:datagridview右键单击,弹出菜单。如果右键单击处的行是被选中的,则对这些选中的行进行操作;如果右键单击处的行不是被选中的,则清除所有选中的行,并选中当前行,然后进行操作。代码: private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs原创 2012-01-03 22:36:37 · 6367 阅读 · 0 评论 -
WinForm中右键菜单的添加
方法一:给需要添加右键菜单的控件设置ContextMenuStrip属性,如给dataGridView1添加菜单方法为: this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;这样做右键菜单自动添加,也无需设定菜单的位置,只要在控件上单击右键,即可在鼠标处弹出菜单这样做的缺点有两个:第一个,不能在控件的指定位置弹出菜单,因原创 2010-06-24 10:17:00 · 7205 阅读 · 3 评论 -
如何在右键单击treeview的某节点时,同时选中该节点?
右键单击treeview弹出菜单,但选中的节点却是之前用左键选中的那个节点,而不是这时用右键选中的那个。解决方法: private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button == Mou原创 2011-12-31 16:21:08 · 3050 阅读 · 1 评论 -
GAMS将har数据转换为gdx数据和Access数据过程中的异步问题
GAMS是非常优秀的经济学建模软件,可以用来求解一般均衡和其他优化问题。GTAP作为一种大型多区域CGE模型,也可以使用GAMS来求解,但使用之前,必须将GTAP提供的har数据转换为GAMS所能使用的gdx数据,如果要在C#或Java等高级语言中调用该数据,则还必须将gdx数据转换成Access数据库数据,数据流为:har--------GAMS--------> gdx------原创 2011-12-31 10:33:59 · 2272 阅读 · 0 评论 -
DataGridView的字段的顺序
为DataGridView设置datasource后,字段的顺序往往是乱的,原因是同一个datagridview只要第一次赋予一张datatable,则后面的结构都会采用第一张的结构,以至于后来显示的字段都是乱的,一个比较典型的例子是表1 有两个字段,即 f1和f2,表2 有3个字段,即f1,f3,f2,当首先将datagridview的数据源设置为表1时,字段顺序为f1,f2,此时再设原创 2011-12-27 20:46:12 · 1570 阅读 · 0 评论 -
查询数据库后,datatable的字段类型问题
今天将从数据库中查询得到的datable赋给datagridview做datasource后,发现其中值类型的字段无法修改相关属性,比如保留小数位数等,后来发现这些值类型统统变成了string类型了。仔细检查后,发现是查询数据库的时候,没有设置datatable的字段与数据库表中的字段类型一致。如果要保持数据类型不表,必须要设置datatable的字段类型与数据库表的字段类型一致。程序如下原创 2011-12-27 20:53:38 · 5381 阅读 · 0 评论 -
C#读取数据库,遇到数据库的关键字时
今天用C#调用mdb数据库,读到某个数据表的时候一直报错,非常诡异。测试了所有的表都可以查询,除了to表,这个表名在GTAP中的意思表示生产税。修改方法: this.oleDbCommand.CommandText = "select * from ["+ str.TrimEnd()+"]";即在表明两侧加括号原创 2011-12-27 18:05:42 · 900 阅读 · 0 评论 -
自定义异常
自定义异常类: class MyException:Exception { public MyException(int a,int b) { this.i = a; this.j = b; } private int i; privat原创 2010-04-28 10:19:00 · 809 阅读 · 1 评论 -
两个Ms Chart共用一个Series时,Series的资源释放问题
在VS2008中用MS Chart控件做统计图,遇到这样一个问题,是关于Series资源释放的。(Series是每个Chart中要显示的数据列集合,每个Series[]有一个Points属性,可以加入多个数据点。) 问题:当有两个Chart添加了相同的Series[]时,当其中一个Chart被dispose掉后,它也将其拥有的Series[]的资源释放掉了(或者把所有原创 2010-04-18 23:18:00 · 2164 阅读 · 0 评论 -
循环中产生伪随机数
在循环中产生多个随机数,容易出现连续相同的数据,最终的多个随机数并不随机,而是带有某种规律性。这种结果的原因在于,Random()函数的默认种子是时间,但在循环中产生随机数时,由于运算速度太快,用做种子的时间是相同的(毫秒级),因此产生的随机数序列是相同的,这样最终的随机数就会相同。(基于“线性同余法”的随机数发生器) 解决方法是,产生一个全局唯一标识符,使用它的哈希值原创 2010-03-18 21:48:00 · 5133 阅读 · 23 评论 -
使用using关键字同时释放多个资源的问题
.Net中托管资源的回收可以使用try…finally的方式进行回收,也可以使用using关键字进行回收,前提是要回收的资源已经实现IDisposal接口。实际上using在内部实现的也是try…finally的方式进行资源释放的。如果需要释放的资源有两个以上,且其类型相同,使用using可以应付的来,如下代码:using (Image image = Image.FromFile原创 2008-10-13 22:39:00 · 2797 阅读 · 0 评论 -
==、Equals()、ReferenceEquals()之间的异同
我们都知道字符串之间的比较,一般使用的是Equals()方法,当然也有不少人使用“==”运算符,但这两者之间有根本性区别,下面我们来看一下。通常比较对象使用三种方式,第一是使用“==”运算符,第二是使用“Equals()”方法,第三是使用“RefereceEquals()”方法。先来看使用“==”进行比较的情况。“==”针对的是值类型的比较,或者说是针对的是栈的比较。栈内存放的主要有原创 2008-10-07 12:03:00 · 1142 阅读 · 1 评论 -
多线程(异步委托)调用和控件响应问题
当系统要进行工作量较大的任务时,倾向于将该任务安排在一个优先级别相对较低的后台线程处理,这样UI线程或主线程还将可以响应用户的其他操作,使系统具有良好的交互性。下面以一个控件刷新的程序为例,讨论多线程和控件的关系。程序代码如下: using System;using System.Collections.Generic;using System.ComponentModel原创 2008-10-19 16:39:00 · 4070 阅读 · 2 评论 -
C#常用函数集锦
1、DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3转载 2008-06-24 16:45:00 · 736 阅读 · 0 评论 -
Dispose、Close、=null三者之间的区别
上午想做个简单的单件设计模式(Singleton)的小例子,结果出现了一些意想不到的问题。我的本意是建立两个窗体类Form1和Form2,在Form2上放置一个名为Button1的按钮,单击Button1会调出Form1的窗口事例,并且保证再单击Button1的时候,不会再弹出第二个Form1实例,除非关掉Form1实例并重新单击Button1,总之,保证只能弹出一个Form1实例(当然不是原创 2008-06-20 14:13:00 · 8841 阅读 · 6 评论 -
非托管资源的回收问题
在WinForm编程里面,我们经常会使用dispose()方法来释放对象所占的资源,实际上这是在释放非托管资源的所占用的内存。开始讨论问题前,有必要把托管资源和非托管资源进行定义,在网上看到很多定义都只是停留在表面意义,这样对学习者的启示远远不如举个例子方便。下面一段是我看到的最好的一段定义:“最常见的一类非托管资源就是包装操作系统资源的对象,例如文件,窗口或网络连接,对于这类资源虽然垃原创 2008-06-20 13:32:00 · 1301 阅读 · 1 评论 -
读《面向对象的思考过程》(Object oriented thought process)后的总结
1. 面向对象(OO)的由来面向对象是相对于面向过程的设计而言的。面向对象产生的原因在于原有的面向过程的程序设计将数据和行为分离,而且数据过分暴露,代码重用性差。有鉴于此,为了将不相关的数据隐藏起来,既数据隐藏,需要对数据和行为进行封装,从而产生了OO。 数据隐藏是将数据隐藏在类内部而不暴露。封装是数据隐藏的必然结果,把数据和行为集成了一个类内,尽量减少数据暴露。 2原创 2008-06-20 14:00:00 · 1432 阅读 · 0 评论 -
使用委托减少类之间的耦合
据说C#的委托跟C++的函数指针很相似,C中的函数指针是n年前学习的,基本上对他不了解,这也是半路出家者在学习中所不得不承担的困难。关于委托,看过很多书和很多文章,反复下来,研读的次数大概不会少于15遍,但每次都似懂非懂。并不是像我这样的菜鸟不懂,就连高手往往也介于懂与不懂之间,仿佛如果昨天高手还理解委托的意义,经过一夜长眠,今天就不懂了。高手给菜鸟讲解的过程中,很容易就中了菜鸟的“圈套”,原创 2008-06-20 13:53:00 · 1672 阅读 · 0 评论 -
拷贝对象的三种方式
对象拷贝又叫对象克隆或对象复制,要求在不影响原对象及其内容的情况下,产生该对象的一个副本并顺利工作。对象克隆一般用于把对象初始化为默认状态。根据这几天的观察,共总结出三种对象拷贝的方法,下面分别介绍。在介绍之前,首先要分清浅拷贝和深拷贝之间的区别。所谓浅拷贝,是指拷贝了对象整体的引用或者对象内部某些引用类型的引用,而非引用类型的属性则拷贝其值。这么说有些抽象,举个例子,假如对象objA(原创 2008-06-20 13:26:00 · 3894 阅读 · 0 评论 -
创建和使用资源文件resources
在.Net中使用AE的ICommand、ITool、BaseComand等定制按钮、工具或菜单的时候,需要添加按钮的位图信息。一般来讲,这种图片一般都存放在项目的资源文件里面。摸索了大半天才大概搞清楚怎么创建、添加和使用资源文件。 一.资源文件的创建使用resgen.exe工具可以创建字符串类型的资源,但不支持图像资源的创建。可以使用C#程序添加图像资源,大概代码如下所示,添加原创 2008-10-13 22:42:00 · 3355 阅读 · 0 评论 -
使用泛型类实现Node链表
是msdn中的一个经典例子。 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 使用泛型类实现Node链{ class Program { static void Main(string[] a原创 2010-01-31 15:42:00 · 1221 阅读 · 0 评论 -
c#实现链队列(队列)
使用单链表实现队列。 front和rear分别表示队列的队头结点和队尾结点。其实并没有必要设置队尾结点这一属性,比如,在实现单链表的时候,并没有加入一个rear的属性,但是加入rear属性的好处在于,避免每次查到尾部元素或者在尾部添加新的元素时,遍历一遍所有的结点,因而单链表的实现实际上也可以做出相同的改进。本质上属于以空间换时间的策略。 队列接口: /原创 2010-03-09 09:31:00 · 1799 阅读 · 1 评论 -
C#实现循环顺序队列(队列)
队列同栈相对,前者为先进先出(First In First In)。 顺序队里中,使用数组存储数据,基本原理同顺序线性表和顺序栈。由于使用数组,所以必须事先定义数组的最大容量MaxSize,使用front表示队头位置(最先入元素),使用rear表示队尾元素(最后入元素),这样每进入一个元素,rear要自加一次,每取出一个元素,front也要自加1,这样的话,re原创 2010-03-08 15:04:00 · 4840 阅读 · 0 评论 -
C#实现顺序栈和链栈
顺序栈和链栈分别类似于顺序表和单链表,只是由于栈的First In Last Out性质,其操作相对简单,是顺序表和单链表的子集。链栈中的链不使用Head属性,这一属性是多余的,使用链栈类的TopNode属性即可。另外,为了避免每次返回链栈的长度都要遍历所有结点,在链栈类中增加Num属性,Push操作时,Num自加,Pop操作时,Num自减,始终等于链栈中的结点数。 using Sys原创 2010-03-06 16:51:00 · 2093 阅读 · 3 评论 -
C#实现双链表(线性表)
双链表同单链表的不同在于结点类增加了一个“前驱结点”属性,此外,给双链表增加一个“尾结点”的属性。在获取某一结点对象时,双链表同单链表几乎没有区别,函数同单链表相似。但在添加结点、插入结点、删除结点、倒序排列等功能上不同。其中,由于双链表有尾结点属性,在末尾添加结点会更加方便,时间复杂度为O(1),而单链表时间复杂度为O(n)。插入结点、删除结点的原理与单链表的相关操作相似,只原创 2010-03-04 23:15:00 · 1790 阅读 · 1 评论 -
C#实现单链表(线性表)
顺序表由连续内存构成,链表则不同。顺序表的优势在于查找,链表的优势在于插入元素等操作。顺序表的例子:http://blog.csdn.net/suinon/archive/2010/02/28/5333668.aspx要注意的是,单链表的Add()方法最好不要频繁调用,尤其是链表长度较长的时候,因为每次Add,都会从头节点到尾节点进行遍历,这个缺点的优化方法是将节点添加到头部,但顺序是颠倒的。原创 2010-03-02 22:12:00 · 4557 阅读 · 1 评论 -
C#实现顺序表(线性表)
基本思想是使用数组作为盛放元素的容器,数组一开始的大小要实现确定,并使用一个Pointer指向顺序表中最后的元素。顺序表中的元素是数组中元素的子集。顺序表在内存中是连续的,优势是查找,弱势是插入元素和删除元素。 为避免装箱拆箱,这里使用泛型,代替object。使用object的例子可以参照http://blog.csdn.net/suinon/archive/2010/02/02/5280原创 2010-02-28 14:59:00 · 3569 阅读 · 5 评论