2010年1月30日
#
弹出选择窗体控件(附源码)
久未在博客园发文章,今天有空,借着郁闷酒气,发个最近做的控件吧(未完结版本)。
先上图,来点真相:

这个应该是许多WebForm程序都需要的功能吧,最近写的小程序里边写了个,就抽出来了,弄了个自己的命名空间,具体的代码方面参考了一下郑健的《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》一书中的某个控件。他那个是.net 3.5的,用了ScriptManager,具体没有详细的了解。这个是.net 2.0的,使用的一些东西也不一样。
顺带说一下,《庖丁解牛》是一本十分推荐的好书,是居家旅游,杀人Mie口的常备好书。
具体遇到两个问题:
1. 向控件所在的WebForm注册JS脚本代码,要在override的OnPreRender处注册。WebForm页面要包
含<form id="form1" runat="server">标记。
2. 在弹出框里边,服务器控件回传后,dialogArguments在IE可以使用,在Firofox和Chrome浏览
器已经不存在了,只能走window.opener来回传值了。
第二点很重要,要浏览器兼容,必须考虑。虽然,直接用dialogArguments可以为返回的控件加js
事件来返回一个值,但是,如果是触发服务器控件的服务器事件,就不能使用dialogArguments了
,服务器回传后,就不能使用dialogArguments,只能用window.opener了,这个东西弄了我一个半
个下午。
尚未实现:回传值绑定到多个控件上。
已经测试浏览器:
IE 6.03XXXXX
Firefox 3.0.4
Chrome 3.0.195.38
其他浏览器尚未测试,代码项目附在文章后边,VS2008下.net2.0的项目。
代码下载【弹出选择窗体控件(附源码)】
2009年9月23日
#
之前记录过一种获取枚举描述信息的方法:http://cat.xiexiao.com/enum_description/
今天,发现扩展一下Enum的方法更好,不过就是只能C#3.0才可以使用扩展方法。
1。定义enum
using System;
using System.ComponentModel;
public enum TimeOfDay
{
[Description("上午")]
Moning = 0,
[Description("中午")]
Afternoon = 1,
[Description("晚上")]
Evening = 2,
};
2.定义扩展:
/// <summary>
/// 获取描述信息
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string description(this Enum en)
{
Type type = en.GetType(); MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0) {
object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return en.ToString();
}
这样子就可以直接用方法:.description()来获取描述信息了。没有描述信息,返回en.ToString()。
这里可以搞到wave邀请
2009年6月11日
#
在一个系统里边应用了一个htmleditor,winform的程序,需要引用Microsoft.mshtml.dll。
所以就引用了.net下的这个文件。添加引用>>.net>>选择Microsoft.mshtml。
开发过程一切完好,没有遇到任何问题。但是部署到另外的一台机器的时候,就出现了,找不到引用的Microsoft.mshtml.dll的问题。看程序目录下也是没有mshtml.dll类似的文件。
看来是这个Microsoft.mshtml.dll出问题了,到网上搜索了一下:
得到以下文章:Microsoft.mshtml到底是什么? (http://www.cnblogs.com/waxdoll/archive/2005/04/08/134196.html)
仔细阅读:原来在COM组件引用里边还有一个mshtml的引用东西。一共有两个mshtml。(以下原文引用):
.NET系统附带了一个mshtml.dll的Interop封装,理论上来说自然无法脱离COM独立存在,但是既然是Interop包装过的,那么在.NET环境中的使用肯定就要比直接调用COM组件有优势。
开始还想着到C盘里边把Microsoft.mshtml.dll拷贝到程序目录了事算了,搜素了一下,发现问题严重了,这是个2.98 MB的大家伙。可是不引用这个可以吗?
好在搜索这个的时候出现了另外两个好东西:WindowsLive.Writer.Interop.Mshtml.dll(165k)和WindowsLive.Writer.Mshtml.dll(113k)。
所以在程序里边删除了Microsoft.mshtml.dll的引用,换上了113k的dll的引用,发现不行。在换上WindowsLive.Writer.Interop.Mshtml.dll(165k),终于可以成功了。嗯,这个小块头的mshtml.dll可以替换掉3M的的那个Microsoft.mshtml.dll,不错,不错。
然后,打开对象浏览器,把两个dll文件对比了一下,不出所料:小的dll是也是针对mshtml COM的封装。WindowsLive.Writer.Interop.Mshtml.dll这个是在Live Writer的里边的,LiveWriter里边也有一个htmleditor,原来上应该和我现在用的htmleditor差不多。
在自己blog上发过,又转这边来了。
2009年4月30日
#
导出所有用户表到excel,结合上一个发的存储过程。
/*--
导出所有用户表到excel
--*/
CREATE proc 导出所有用户表
as
DECLARE @tb_name varchar(300)
DECLARE tbname_cursor CURSOR FOR
select o.name from dbo.sysobjects o
where OBJECTPROPERTY(o.id, N'IsUserTable') = 1
and o.name<>'dtproperties'
order by o.name
OPEN tbname_cursor
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM tbname_cursor
INTO @tb_name
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
--导出所有用户表
exec('p_exporttb @sqlstr=''select * from '+@tb_name+' '',@path=''c:\abc'',@fname='''+@tb_name+'.xls'',@sheetname='''+@tb_name+'''')
FETCH NEXT FROM tbname_cursor
INTO @tb_name
END
CLOSE tbname_cursor
DEALLOCATE tbname_cursor
2009年4月9日
#
摘要: 还是在用Sql Server2000的,放出一个修改过的Sql Server数据导出EXCEL存储过程,提供了分sheet功能,之前的版本是没有这个功能的,解决超过65535行的问题。[代码]
阅读全文
2009年2月4日
#
摘要: 上次的C#的串口编程没有写这个,这次补充上去,就比较完整了。开始自己写写也不太会用事件来读取串口传来的信息:就想着用另外的线程来读取,用事件轻松挺多了。直接点的代码serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);//对你的serialPo...
阅读全文
2009年1月15日
#
摘要: XML-RPC.NET的X509Certificates如何使用呢?继续上一篇的问题。用起来挺简单的,但是有点麻烦的问题,也要到网上找找答案才行。先来看实验条件(这个X509Certificates好像应该是给SSL链接的时候使用的,我就这中使用方法):1。先看看服务器端:xampplite下的php,已经开启了SSL链接(好像是装了就有了),默认已经加载php_xmlrpc.dll模块,用这个模...
阅读全文
2009年1月14日
#
摘要: XML-RPC.NET,最近在用的一个DLL,用起来不错,几个代码就可以对远程的XML-RPC数据进行交换了。对XML-RPC不太懂的可以看看本网站的Xml-rpc类别。我用这个是用来与远程的PHP网站来进行数据交换。相比WebServices这个大块头来说,xml-rpc就是小菜一碟了。不过这小菜下下酒还是不错的。OverviewXML-RPC.NET is a library for impl...
阅读全文
2008年12月27日
#
摘要: 这本应该是比较容易漏眼的书。不是红部头,不是MsPress,也不是O'Reilly的(原版是)。书店里边摸上手,看了看,内容不错。douban一下,才知道是作者的原版是法文版本。英文版到了一个小公司。然后中文版是图灵引进。图灵的书质量不错。该介绍的都介绍到了,就像是副标题:平台,语言与框架。实在是放在手边的工具书,上博客园的时候手边放一本,碰到有什么不懂,懂一点的,就翻翻。joyo对这本书的配送不...
阅读全文
2008年12月12日
#
摘要: 先来两个都是延时两秒的方法,需要using System.Threading;using System.Collections.Generic;[代码]第一个为页面顺序执行的按钮:[代码]打开trace后可以看到,页面的执行时间大于4秒,两个方法与页面在同一个线程里执行。第二个为参考上一篇文章如何在winform中用委托做异步的,也把委托做异步用在ASP.NET上:先定义委托:[代码]添加委托异步...
阅读全文