博文

C#中DataGridView实现某一列只能输入数字(2013-06-24 16:38:00)

摘要: 最近在开发一个项目时,要求某一列只能够输入数字,其它的字符都不接受,Microsoft 没有提供这个功能,只能自己用代码实现,在网上找了一下,大多数都在输入完成后才验证的。这样不爽,我这个代码可以在输入进就屏蔽了非数字的字符。主要是在 EditingControlShowing事件中完成 。看代码:
public  DataGridViewTextBoxEditingControl CellEdit = null; // 声明 一个 CellEdit
  private void datagridyf_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
       
            CellEdit = (DataGridViewTextBoxEditingControl)e.Control; // 赋值             CellEdit.SelectAll();
            CellEdit.KeyPress += Cells_KeyPress; // 绑定到事件 
        }
  // 自定义事件
        private void Cells_Key......

阅读全文(1079) | 评论:1 | 复制链接

.Net DateTime.ToString 格式化输出 (转载)(2013-04-16 10:36:00)

摘要:   原文 虽然 System.DateTime 本身已经具有了不少现成的格式化输出,例如: ToLongDateString, ToShortTimeString, ToUniversalTime 等,但是却远远不能满足我们实际的需要,这就要用到了 DateTime.ToString,就要提到 DateTimeFormatInfo 了,见下面的 MSDN 说明:
格式字符   关联属性/说明 d    ShortDatePattern
     
D    LongDatePattern f    完整日期和时间(长日期和短时间) F    FullDateTimePattern(长日期和长时间) g    常规(短日期和短时间) G    常规(短日期和长时间) m、M    MonthDayPattern r、R    RFC1123Pattern s    使用当地时间的 SortableDateTimePattern(基于 ISO 8601) t    ShortTimePattern T    LongTimePattern u    UniversalSortableDateTimePattern 用于显示通用时间的格式 U    使用通用时间的完整日期和时间(长日期和长时间) y、Y    YearMonthPattern   具体使用时的格式参见: 格式模式  &n......

阅读全文(844) | 评论:1 | 复制链接

《CLR via C#》读书笔记(8)-- 泛型(下)(2013-01-27 08:37:00)

摘要: 1. 类型对象 首先看如下代码:
class Program { static void Main(string[] args) { List<object> objs = new List<string>(); Console.ReadKey(); } }
以上代码在C#编译器中会报错,错误是类型不匹配。说明泛型的继承结构和类型实参的继承关系是不一定一致的。在CLR中,泛型的内部构造如下:  
CLR会为每一个指定了泛型实参的封闭类型创建一个类型对象(同一个类型实参只会有一个类型对象) 所有为封闭类型创建的类型对象的父类型对象均为其泛型开放对象的父类型的类型对象。 所有为封闭类型创建的类型对象中均保存了在其开放类型中定义的静态成员变量。 每一个封闭类型的类型对象在创建时均会调用在其开放类型中定义的静态构造函数来初始化静态成员。
因此上述代码其实CLR为创建两个新的类型:List<Object>,List<string>(真实的类型名称会有所差别)。这两个类型均继承于List<T>的父类:Object. 故List<String>与List<Object>之前没有继承关系,并且它们之前也不会共享在List<T>中所定义的静态成员。(由上图可知)。 还是看一下IL确认一下:
.method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 20 (0x14) .maxstack 1 .locals init ([0] class [mscorlib]System.Collections.Generic.List`1<......

阅读全文(1205) | 评论:1 | 复制链接

HttpHandler和HttpModule 区别(2013-01-26 16:31:00)

摘要: ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达
HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览
器中。
生命周期中涉及到几个非常重要的对象:HttpHandler,HttpModule,IHttpHandlerFactory,他们的执行(顺序)大致的执行过程是这样的:client端发送页面请求,被IIS的某个进程截获,它根据申请的页
面后缀(.aspx)不同,调用不同的页面处理程序(.asp->asp.dll;
.aspx->ISAPI.dll).而页面处理程序在处理过程中,则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面的处理。
如前所说,HttpModule会在页面处理前和后对页面进行处理,所以它不会影响真正的页面请求。
常用在给每个页面的头部或者尾部添加一些信息(如版
权声明)等.曾经见过一些免费的空间,我们的页面上传上去后,浏览的时候发现,
在每个页面的头部和尾部多了很多小广告....,如果理解了
HttpModule的原理,要做这个就不是很难了~
IHttpModule与IHttpHandler的区别整理
1.先后次序.先IHttpModule,后IHttpHandler.
注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些是在Handler之后运行的
2.对请求的处理上:
IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.
IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.
3.IHttpHandler按照你的请求......

阅读全文(1198) | 评论:1 | 复制链接

一点一点学ASP.NET之基础概念——HttpModule(2013-01-26 16:17:00)

摘要:HttpModule是如何工作的 当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。 示例1: using System; using System.Collections.Generic; using System.Text; using System.Web; namespace MyHttpModule {      /// <summary>      /// 说明:用来实现自己的HttpModule类。      /// 作者:文野      /// 联系:stwyhm@cnblogs.com      /// </summary>      public class MyFirstHttpModule : IHttpModule      {          private void Application_BeginRequest(object sender, EventArgs e)          {   ......

阅读全文(899) | 评论:1 | 复制链接

一点一点学ASP.NET之基础概念——HttpHandler(2013-01-26 16:14:00)

摘要:概述 HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。 IHttpHandler是什么 IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。 IHttpHandler如何处理HTTP请求 当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。 对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。 一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。
图1:ProcessRequest方法
一个简单的HttpHandler容器 通过实现IHttpHandler接口可以创建自定义HTTP处理程序,该接口只包含两个方法。通过调用IsReusable,IHttpHandlerFactory可以查询处理程序以确定......

阅读全文(763) | 评论:1 | 复制链接

c#中的非托管资源释放 (Finalize和Dispose)(2013-01-25 16:55:00)

摘要: 在了解Finalize和Dispose之前,我们需要了解两个概念,一个是托管资源,一个非委托资源。
a.其中托管资源一般是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,例如程序中分配的对象,作用域内的变量等。
b.而非托管资源是CLR不能控制或者管理的部分,这些资源有很多,比如文件流,数据库的连接,系统的窗口句柄,打印机资源等等……这些资源一般情况下不存在于Heap(内存中用于存储对象实例的地方)中。
.Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不需要显式的去释放自己使用的内存资源(这些在先前C和C++中是需要程序员自己去显式的释放的)。这种管理机制称为GC(garbage collection)。GC的作用是很明显的,当系统内存资源匮乏时,它就会被激发,然后自动的去释放那些没有被使用的托管资源(也就是程序员没有显式释放的对象)。
但正如上面说的,CLR的GC功能也只能释放托管资源,对于非托管资源例如窗口,文件和网络连接等,它都只能跟踪非托管资源的生存期,而不知道如何去释放它。这样就会出现当资源用尽时就不能提供资源能够提供的服务,windows的运行速度就会变慢。这样的情况会出现在数据库的连接当中,当你没有显式的释放一个数据库资源时,如果还是不断的申请数据库资源,那么到一定时候程序就会抛出一个异常。
所以,当我们在类中封装了对非托管资源的操作时,我们就需要显式,或者是隐式的释放这些资源。而上面提到的Finalize和Dispose方法分别就是隐式和显式操作中分别使用到的方法。
Finalize一般情况下用于基类不带close方法或者不带Dispose显式方法的类,也就是说,在Finalize过程中我们需要隐式的去实现非托管资源的释放,然后系统会在Finalize过程完成后,自己的去释放托管资源。
如果要实现Dispose方法,可以通过实现IDisposable接口,这样用户在使用这个类的同时就可以显示的执行Dispose方法,释放资源。 以下是MSDN上提出的Finalize和Dispose方法的使用指南,如果你的类遵循这个标准的话,你写出的类在.Net平台上就是一个“良民”。 Final......

阅读全文(1855) | 评论:1 | 复制链接

外部表不是预期的格式-excel(2013-01-04 13:05:00)

摘要: 在操作excel将数据从外部导入到数据库时, 刚开始操作的没有问题的,却报出了:“外部表不是预期的格式”错误信息。 仔细查看excel没有问题, 查阅资料,发现有人说:
解决方法:
用记事本打开你的excel文件,看看显示是否为乱码。
若是html代码,则表示你的excel文件格式不是标准的excel格式,才会提示“外部表不是预期的格式”的错误;
若是乱码,我这边测试是不会提示这个错误的,可以成功导入。

其实出现这个错误的原因是,你的Excel是从程序中导出的,并且是使用
Response的方式直接把html代码输出到Excel中的
其实是可以解决的,导出的时候使用Excel操作Api来导出就是标准格式
-----------------------------------------------------------------------------------------------------
遇到了这个问题,Response输出的EXCEL文件修改后上传更新时出错,
“外部表不是预期的格式”
解决方式:
1.用EXCEL另存为功能另存成标准格式XLS格式(Response导出的其实是网页文件)
我尝试了,果然成功了,虽然我的excel不是导出的html格式,但是,我认为还是excel本身在操作时,由于疏忽,导致了本身的问题。 ......

阅读全文(4140) | 评论:1 | 复制链接

C# 导入EXCEL 报错外部表不是预期的格式错误(2013-01-04 13:05:00)

摘要: 错误经过:在读取Excel时,出现外部表不是预期的格式 错误原因1: 由于Excel 97-2003的连接格式与Excel 2010 的 不同造成。 以下是从网上摘抄原文 Excel “External table is not in the expected format.” . Question: I'm trying to read an Excel (xlsx) file using the code shown below. I get an "External table is not in the expected format." error unless I have the file already open in Excel. In other words, I have to open the file in Excel first before I can read if from my C# program. The xlsx file is on a share on our network. How can I read the file without having to open it first? Thanks string sql = "SELECT * FROM [Sheet1$]";  string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=/"Excel 8.0;HDR=YES;IMEX=1;/"";    using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {  DataSet ds = new DataSet();  adaptor.Fill(ds);  }   Answers: "External table is not in ......

阅读全文(8731) | 评论:11 | 复制链接

ASP.NET页面事件处理流程图(原创,请珍藏)(2012-12-22 18:54:00)

摘要: Process Page methods Page events Control methods Control events 方法作用 Start ProcessRequest 设置 System.Web.UI.Page 对象的内部服务器对象,如 System.Web.UI.Page.Context、System.Web.UI.Page.Request、System.Web.UI.Page.Response和 System.Web.UI.Page.Application 属性。 InitializeCulture 为页的当前线程设置 System.Web.UI.Page.Culture 和 System.Web.UI.Page.UICulture。 DeterminePostBackMode 返回使用 POST 或 GET 命令回发到页的数据的 System.Collections.Specialized.NameValueCollection。 OnPreInit 在页初始化开始时引发 System.Web.UI.Page.PreInit 事件。 PreInit 在页初始化开始时发生。 On......

阅读全文(1528) | 评论:2 | 复制链接