C#四舍五入函数
C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的Math.Round 方法默认的也是 Banker 舍入法在 .NET 2.0 中 Math.Round 方法有几个重载方法Math.Round(Decimal, MidpointRounding)Math.Round(Double, MidpointRounding)Math.Round(Decimal, Int32, MidpointRounding)Math.Round(Double, Int32, MidpointRounding)将小数值舍入到指定精度。MidpointRounding 参数,指定当一个值正好处于另两个数中间时如何舍入那个值该参数是个 MidpointRounding 枚举此枚举有两个成员,MSDN 中的说明是:AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。注 意!这里关于 MidpointRounding.AwayFromZero 的说明是过错的!实际舍入为两个值中绝对值较大的值。不过 MSDN 中的 例子是正确的,英文描述原文是 it is rounded toward the nearest number that is away from zero.所以,要实现四舍五入函数,对于正数,可以加一个 MidpointRounding.AwayFromZero 参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:Math.Round(3.45, 2, MidpointRounding.AwayFromZero)不过对于负数上面的方法就又不对了因此需要自己写个函数来处理第一个函数:double Round(double value, int decimals){if (value < 0){return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);}else{return Math.Round(value, decimals, MidpointRounding.AwayFromZero);}} 第二个函数:double Round(double d, int i){if(d >=0){d += 5 * Math.Pow(10, -(i + 1));}else{d += -5 * Math.Pow(10, […]
View Details按照功能排列的MIME_type类型
类型/子类型 扩展名 application/envoy evy application/fractals fif application/futuresplash spl application/hta hta application/internet-property-stream acx application/mac-binhex40 hqx application/msword doc application/msword dot application/octet-stream * application/octet-stream bin application/octet-stream class application/octet-stream dms application/octet-stream exe application/octet-stream lha application/octet-stream lzh application/oda oda application/olescript axs application/pdf pdf application/pics-rules prf application/pkcs10 p10 application/pkix-crl crl application/postscript ai application/postscript eps application/postscript ps application/rtf rtf application/set-payment-initiation setpay application/set-registration-initiation setreg application/vnd.ms-excel xla application/vnd.ms-excel xlc application/vnd.ms-excel xlm application/vnd.ms-excel xls application/vnd.ms-excel xlt application/vnd.ms-excel xlw application/vnd.ms-outlook msg application/vnd.ms-pkicertstore sst application/vnd.ms-pkiseccat cat application/vnd.ms-pkistl stl application/vnd.ms-powerpoint pot application/vnd.ms-powerpoint pps application/vnd.ms-powerpoint ppt application/vnd.ms-project mpp application/vnd.ms-works wcm application/vnd.ms-works wdb […]
View Details用于构建交互式图表的最佳 jQuery 图表库
对于JQuery图表来说,其重要的功能是以一个简洁和交互的方式展示繁杂的原始数据。这并不仅仅以各种颜色来渲染展示数据,而应该是更能够吸引读者和方便用户理解。 稍后介绍的某些javascript图表库,已经越来越流行了,因为它们有着相当吸引人的组件,囊括了我们已知的包括线状图,柱状图和饼图等7种图表类型。另外,这些js图表库提供一些有用的组件作为它们的可选项,比如说放大,缩小,这些工具能提供关于数据的更多信息,同时也提供一些选项对其进行定制。 tnjin 翻译于 2天前 0人顶 顶 翻译的不错哦! 用户通常遇到某些使用了兼容现代浏览器的HTML5的canvas特性的jQuery图表,并不能很好的与IE兼容。整体上,这些库集成了六种图表类型,比如散点图,饼图,柱状图,带点的折线图以及区域图。这些图表能够通过简单的配置就能展示多种图例,这将帮助人们清楚的分辨各图表项。 在这篇文章中,我们分享给读者的是15个图表库——各种从简单到复杂的高级图表,它们都能胜任。希望你们喜欢! tnjin 翻译于 2天前 1人顶 顶 翻译的不错哦! 1. Chart.js : 使用HTML5 canvas的图表库 Chart.js是一个令人印象深刻的基于HTML5的canvas特性构建的javascript图表库。目前支持六种图表类型(折线图,柱状图,雷达图,饼图,柱状区域图和极坐标区域图),而且这些通过一个独立的,不足5Kb的包来提供的。颜色,字体,加粗以及图表大小都是可以定制的。同时,图表也可以选择在加载的时候添加动画效果。 Source tnjin 翻译于 2天前 0人顶 顶 翻译的不错哦! 2. xCharts : 基于数据驱动的图表 xCharts是一个用于给网站创建具有漂亮的视觉效果和自定义数据驱动的图表的javascript库,它依赖于D3.js。基于HTML,CSS和SVG技术,xChart被设计成能够被动态,流式和开放的集成和定制。 由于xChart使用SVG技术,我们能够直接通过CSS生成大部分的我们定义的xChart图表。这意味着如果你愿意,你只需要做很少的控制就可以处理这些可视化的图表。定义图表风格的最好的方式是从包含的样式表开始,或者使用你的浏览器的元素监视器来查看每一个元素可用的CSS选择器。 Source tnjin 翻译于 2天前 0人顶 顶 翻译的不错哦! 3. Sigma.js : 使用HTML5的canvas对象作图 Sigma.js 是一个使用HTML5 Canvas元素作图的免费开源的javascript图表库。它被特别设计成适合分享页面上交互的网络地图和浏览动态的网络数据库。这个js库以MIT协议分发。 Source 4. HighCharts Highcharts 是一个纯粹使用HTML5/Javascript写的图表库,能向你的网站或者网络应用提供直观交互的图表。目前,Highcharts支持折线图,曲线图,面积图,面积拟合图,条状图,柱状图,饼图,散点图,仪表图,面积范围图,面积曲线图,条状范围图,气泡图,箱型图,误差线,漏斗图,瀑布流和极坐标图表类型。 Source tnjin 翻译于 2天前 0人顶 顶 翻译的不错哦! 5.Fusion Charts jQuery 的FusionCharts插件帮助你增加交互式的JavaScript图表,在你的网站,移动端和企业级应用中绘图。它将FusionCharts套件XT的灵动和全面的特点与jQuery简易的语法融合在了一起 Source 6. Flot : jQuery中引人注目的JavaScript绘图插件 Flot 为jQuery准备的一个纯JavaScript绘图库, 重点在于使用简单,引人注目的界面和良好的交互特性。图的一些关键特性是通过开关,放大缩小和与数据点交互来控制的,此外还有它加入了简单工具提醒的功能 Source Mitisky 翻译于 2天前 0人顶 顶 翻译的不错哦! 7. JS Charts : 免费的JavaScript图表 JS Charts是一个基于JavaScript的图生成器,它只需要很少或不需要编码。使用JS Charts来绘制图表是一个简单且容易的工作,因为你只需要使用客户端脚本(即通过Web浏览器操作)。不需要额外的插件或服务器模块。只引用这个脚本,准备好图表数据的XML、JSON或JavaScript数组,OK,你的图表已经就绪了! 源码 8. jQuery Sparklines 这个jQuery插件直接在浏览器中生成波形图(小的内联图表),使用的数据可以是内嵌在HTML中或通过JavaScript提供。这个插件与大多数现代浏览器兼容,已经使用Firefox 2+、Safari […]
View DetailsASP.NET实现下载的中文文件名乱码处理
<% if request("infoid")<>"" then set rs=conn.execute("select * from nproduct where id="&request("infoid")) if not (rs.eof and rs.bof) then proname=rs("proname") content=rs("proinfo") end if rs.close set rs=nothing end if %> 早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代码: … Response.ContentType = mime; //相应的MIME TYPE Response.AppendHeader("Content-Disposition", "attachment; filename=\"" +fileName + "\""); Response.BinaryWrite(bytes); Response.End(); … 当fileName中包含中文时, 文件下载保存时, 文件名变成了乱码, 需要用户修改,这也就违被了我设定预设文件名的初衷. 解决办法1: 对fileName进行URL编码, 把下划线标注的那句改为Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");便可. 虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑. 还有一个办法, 可以很简单的解决以上的两个问题: 解决办法2: 假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为 http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了, 试一下, 结果一定让你非常满意! 转自:http://www.webshu.net/jiaocheng/programme/ASPNET/200606/1427.html
View Details被诅咒的程序员的七宗罪
七宗罪(Seven deadly sins),13世纪道明会神父圣多玛斯·阿奎纳列举出各种恶行的表现。这些恶行最初是由希腊神学修道士庞义伐草撰出8种损害个人灵性的恶行,分别是贪食、色欲、贪婪、暴怒、懒惰、伤悲、自负及傲慢。 程序员生来不平等。有的伟大。有的渴望伟大。有的就是废物。 下面是一些程序员经常会走入的歧途。听起来很恐怖,但享用吧。上帝就在你身边,警惕这些危险的信号,跟随主救赎的指引。 1. 色慾(Lust) 凡犯色欲者:在硫磺和火焰中熏闷 作为程序员,这种罪恶的表现是不断的受绚丽的新事物的诱惑。下一代编程语言,最新的框架,最新的平台。 我们程序员天生好奇。我们受惑于追求高效,坚信所有的东西都要经过优化。只有用了那种最新的语言,我们才能工作。 虽然不断的追求改进是非常值得赞赏,但采用新事物也是有代价的。有避免不了的学习曲线。有适应问题。有未知的依赖问题。有未知的未知问题。 清除这些杂念。专心解决你手头上的问题。充分利用你知道的,停止贪恋那些光鲜新事物。 2. 贪食(Gluttony) 凡犯贪食者:强迫进食老鼠,蟾蜍和蛇 这是过度之罪。过度的企图多做,过度的扩展深度和广度。 不必要的功能特征溜进了产品里。大量无用的代码被生产出来。宝贵的编程时间被消耗,被浪费。 这些行为增加了不必要的复杂度,带来的高昂的维护代价。通常导致的结果是,预期不能完工。bug层出不穷。 警惕那些不该有的功能、警惕那些对不必要的复杂架构的伪辩护、警惕过早优化的迹象。让产品简洁。 3. 贪婪(Greed) 凡犯贪婪者:在油中煎熬 过度专业化和功能化会导致形成个人的领地。固步自封。我的代码。我的模块。我相干的区域。没有分享。没有合作。 一种不健康的对这些人的依赖会逐渐形成。所谓的“编程教父”,“编程巨星”和“编程领袖”就代表了这些趋势。 相反,应该建立一个崇尚代码集体所有和充分合作(比如结对编程或相互代码审查)的文化。 4. 怠惰(Sloth) 凡犯懒惰者:丢入蛇坑 根据Perl语言的创造者Larry Wall的话,懒惰是程序员的三个伟大美德之一。 但懒惰不能和冷漠混为一谈。长时间不理出现的问题。允许代码腐烂异味。不重构拷贝/粘贴过来的重复代码。 对软件开发中这些需要修改的东西要有一种紧迫感。事无巨细。这是保持软件健康的必要态度。 5. 暴怒(Wrath) 凡犯暴怒者:活体肢解 在有些地方,有些程序员是每个人都尊敬,也是每个人都害怕。你也许遇到过这样的火星极客。他们恃才放旷,为所欲为,其他人在他身边都惦着脚走。避免和他冲突。 他们喜怒无常,他们的怒气经常撒错方向。他们贬低他人,破坏团队和谐。 警惕这种不受约束的对峙气氛的滋生。拒绝忍受这样的撒野。立即辞掉他们。 6. 妒忌(Envy) 凡犯妒忌者:投入冰水之中 不满足于现有的工具和系统,有些程序员眼睛总是盯着别人的。 我曾经遇到过这样的经历,一个wiki系统正在使用中,另外一个却同时被引进,因为它的标记语法感觉更好一些。两个问题跟踪系统,多种聊天系统,不兼容的博客平台,等等。 如果你不喜欢某个工具,相信有比它更好的,那好,去找到它,使用它。但是,请完全放弃你现有的。吃着碗里又想占这锅里,只会得不偿失,给自己制造麻烦。 7. 傲慢(Pride) 凡犯傲慢者:轮裂 有些程序员喜欢孤芳自赏。对自己的能力过度自信。从不寻求帮助。 更 糟糕的,他认为所有的事情都应该由自己来完成。虽然他有能力完成任何的任务,但他却没能完成,因为他承担的太多了,无法集中精力。他分不清什么是核心什么 是次要的。在可以使用云服务时他建造自己的服务器,在能使用成熟的部署系统时他重新发明自己的,他开发出跟现有框架功能相同的框架,等等。 诚然,做研究是有趣的。这些研究经常被辩称为“基础”或“革新”,但却因没有更快捷的创造商业价值而使产品丧失市场先机。 小心“非我发明(Not Invented Here)”综合征。准确的定义你的核心目标,你的首要工作。其它的都是次要的,可以借用别人的。这没有什么好羞愧的。 [英文原文:7 Sins of Doomed Teams ] 转自:http://www.oschina.net/news/46550/7-sins-of-doomed-teams
View Details15 个最佳的 jQuery 表格插件
现如今,网站开发设计的需求会要求自动适应所有移动设备,即响应式网站: 在开发网站时必须考虑对平板设备融合 fluid(流)和自适应性特点。 大多数网站设计要靠margins, guides, rows and columns等网格系统和布局来在网页上组织内容。网格设计常见于报纸和杂志中的文字图像排版设计。 可以创建网格布局的数量几乎是无限的,并且能够用无数种方式排布。比如:在等间距的两列,三列或者四列网格顶端有一个横跨的header,或者一整页的有着同样外观和感觉的方格。 有一些很好的JQuery网格布局插件能够大幅的缩短开发时间,如果你在你下一个项目中使用的话。这些网格插件能够优化瀑布流,使列的大小可调,滚动数据以匹配header,同样也可以添加数据网格,以及针对网格的一些动作比如:重新调整列的大小,分页,排序,行和列的样式等等。 下面是15款jQuery网格布局插件,能够让开发者和设计师在创建响应式布的网格布局时,同时拥有迷人的视觉效果,以及一个兼容所有浏览器和手持设备的响应式的外观。希望你们能够喜欢! 1.自由墙 自由墙是一个跨浏览器的响应式jQuery插件,它可以帮助你创建很多不同的网格布局:灵活布局,图片布局,网格,流体网格,metro风格布局还有用CSS3实现的动画效果和回调事件的瀑布流布局。自由墙是一站式的解决方案来在桌面,移动和平板上动态创建网格布局。 它是基于容器的宽(或高)以及单元的宽(或高),同时它会创建一个虚拟的矩阵。扫描矩阵的每一个单元,找到空闲单元并让其为空白区域,之后将一个块元素插入。若果没有块可以匹配的话,它将缩放块来适应(这是选项之一) 出处 2. S Gallery S Gallery 是一款 jQuery 图片画廊插件 ,将图片显示在响应式网格。它的灵感来自于Sony’s产品页画廊 (Flash实现) 并完全实现了它的功能。当一个项目获得焦点或被点击时, 可以使用 prev-next 按钮 或使用键盘来浏览其他操作。 单击后会返回网格视图并有一个全屏选项(使用HTML5全屏API). 查看代码 3. Mason.js 创建一个动态列的网格布局(比如Pinterest)有许多javascript方案。虽然大多数都很棒,但有时,这些网格会含有缝隙或者锯齿边缘。Mason.js是一款致力于通过智能填充空隙,力图表现完美网格的jQuery插件。一个网格被创建出来,这款插件会计算空隙的位置并使用预定义的元素或者重复内容填充空隙。元素的大小,列/行的大小,断点以及布局是流式还是固定都是可以被重新定义的。 Source 4.jQuery.Shapeshift 有许多jQuery的插件可以创建一个照片分享样式的动态网格布局。jQuery.Shapeshift是一个正是这类插件的强大替代品,通过一个触摸动作,这些图片可以拖曳(需要使用jQuery UI)。拖曳可以影响网格布局,就像网格在需要的时候,会自动去填充空隙一样。这同样在触摸设备和响应式布局上有效。这个插件有许多灵活可变的参数,比如设置margin,启用/禁用拖曳,自定义动画等等。 Source 5. jQuery Nested Nested是一款可以生成多列没有空隙的网格布局的jQuery插件。这个插件为所有的元素创建一个矩阵,建立一个多列的网格,并尝试用记录的元素来填充所有空隙。其实有很多解决方案能够达到同样的效果。但是,Nested提供了一个小的动作:它能够重新调整网格底部的任何元素,以确保没有缝隙。它的用法也很简单,只需要给一个jQuery的函数指定容器元素就行。并且,提供了多种可选参数方便用户定制,比如启用/禁用动画,最少列数等 Source 6. Wookmark jQuery Plugin 拥有动态列的网格布局如此流行,并不仅仅是因为它们被用于图片分享的网站,更是因为对于不同大小的内容显示来说,这是一个非常棒的方式。Wookmark,Pinterest的替代品,发布了一个可以创建那样布局的jQuery插件,兼容所有的浏览器。目前,这个插件只提供了少量的可选项:容器元素,offset(垂直/竖直距离)和元素的宽度——就这些。在初始化时,它会自己获取窗口的大小并自动排布网格(当然,它也是响应式的布局)。 Source Grid-A-Licious是一个jQuery插件,可以让你很容易的创建类似Pinterest的浮动表格布局。当然也有其他的插件能够完成这个功能,但Grid-A-Licious提供了更完善的响应式解决方案。不管什么尺寸的屏幕,还是什么设备,表格表现得都很完美,它都能实现浮动而不使用绝对定位。插件提供了自定义宽度、间隔和动画(速度,过渡时间,效果等等)的选项,并且它支持在表格前或后插入新项目,这对于动态布局来说是非常有用的。 Source 8. jPhotoGrid jPhotoGrid只需要图像和字幕的简单列表,就可以将其变成了可以浏览和放大照片的网格。这个插件几乎所有的样式都是靠CSS完成的。诀窍是通过浮动的列表项来对网格进行布局。而插件会做的第一件事,就是将这些都转换成绝对定位。这就是为什么这个插件可以放大单个图像,然后将其返回到原来的地方。 来源 9. Gridster Gridster是一个令人印象深刻的jQuery插件,是为了开发出一个类iGoogle的多列网格,可以拖动n行删除并重新排序。该插件只需要jQuery(不用jQuery UI),可以将任何给定的HTML构造成网格的部件。而且,不局限于最初加载的元素,它还可以动态的添加新元素和删除现有的元素。 来源 10. Photoset Grid PhotosetGrid是一个简单的jQuery插件,用来将图片基于Tumblr的图片集功能,整理成一个灵活的网格。插件最初用于Style Hatch Tumblr主题,以此来在一个响应式的布局中显示图片集,但他们后来扩展了它,并为我们发布了一个jQuery插件。 来源 11. Flex Flex是一个流式非对称的网格动画jQuery插件。你可以将鼠标放在瓦片上,就能看到它们渐渐扩大。 Flex是一个想法,灵感来自于Adidas.com的flash主页。 来源 12. Freetile […]
View Details“无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内容,但无法进行处理。 – WSDL 文档包含无法解析的链接。 – 下载“http://admin-pc/IISHostService/Service1.svc?xsd=xsd0”时出错。 – 基础连接已经关闭: 接收时发生错误。 – 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 – 远程主机强迫关闭了一个现有的连接。 元数据包含无法解析的引用:“http://admin-pc/IISHostService/Service1.svc?wsdl”。 元数据包含无法解析的引用:“http://admin-pc/IISHostService/Service1.svc?wsdl”。 如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。 该错误是在使用svcutil生成client代码时报的错误,服务是部署在IIS7上,部署的过程都是完全教科书式的进行。服务也正常启动了,显示如下内容 已创建服务。 若要测试此服务,需要创建一个客户端,并将其用于调用该服务。可以使用下列语法,从命令行中使用 svcutil.exe 工具来进行此操作:
1 |
<strong>svcutil.exe </strong><a href="http://leo-pc/IISHostService/Service1.svc?wsdl"><strong>http://leo-pc/IISHostService/Service1.svc?wsdl</strong></a> |
按照提示直接用svcutil.exe http://admin-pc/IISHostService/Service1.svc?wsdl命令去生成代码,就出现了开头说的那个错误。而如果用visual studio的webdevserver启动,则一切正常。 经过一轮谷百之后,发现网上有很多类似的情况,有的说是因为用了wsHttpBinding协议引起的,或者是元数据没有正确公开,但都不是他们说的情况。后来找到了一篇文章,说的是添加WCF引用的一个陷阱。里面提到的情形跟我遇到的一致,原来问题出在权限,难怪用webdevserver可以很正常的运行。原来在下载http://admin-pc/IISHostService/Service1.svc?xsd=xsd0时的权限不足,在浏览器直接访问这个url会提示找不到页面。原因就是IIS进程的用户没有访问Windows\Temp目录的权限。找到Temp目录,然后找到IIS_USER用户,授权即可。 具体可参考:http://merill.net/2008/04/wcf-add-service-reference-gotcha-with-windows-server/ 转自:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html
View DetailsAsp.Net分页和AspNetPager控件的使用
在Asp.Net中对页面分页的方法很多,可以直接用sql语句分,也可以使用.net提供的PageDataSource类来分页,显示的视图同样可以使用第三方控件AspNetPager等来显示,下面就来重点说说这几种分页方式: 一般情况下我们都是通过sql语句来分页,这在无论哪种开发语音都是通用的, 使用sql语句或者存储过程分页的方式最主要的是要在读取数据的时候把sql语句或者存储过程写好,它的原理是只读取当前要显示的几行记录,所以要根据页数和每页显示的数目来写语句,如下: 很显然只要将pageSize和Page作为参数就可以了,然后再前台调用的时候只要指定当前页数和每页显示的数目,就可以实现分页了,为了显示总数目,还可以读取所有数目,可以通过url来传递页码,如果总记录数位count,每页显示的数目为pageSize,那么总页数就是pageCount=((count-1)/pageSize)+1,在读取的时候代码如下: int rowLine = (currentPage – 1) *pageSize; sql = "Select top pageSize * from News where id not in(select top rowLine id from News)" 然后在页面中 int pp=1; DataSet ds = TransactionsBLL.GetList(kid, pp); DataSet ds1 = TransactionsBLL.GetList(kid); int count = ds1.Tables[0].Rows.Count; int pageCount = ((count-8-1) /16) + 1; if (pp < pageCount) { lblFy.Text = "共" + count + "条 <a href='?id=" + cid + "&pager=1′>首页</a> <a href='?id=" + cid + "&pager=" + (pp – 1) + "'>上一页</a> <a href='?id=" + cid + "&pager=" + (pp + 1) + "'>下一页</a> <a href='?id=" + cid + "&pager=" + pageCount + "'>尾页</a> 当前第" + pp + "页/共" + pageCount + "页"; } else { lblFy.Text = "共" + count + "条 <a href='?id=" + cid + "&pager=1′>首页</a> <a href='?id=" + cid + "&pager=" + (pp – 1) + "'>上一页</a> <a href='?id=" + cid + "&pager=" + pageCount + "'>下一页</a> <a href='?id=" + cid + "&pager=" + pageCount + "'>尾页</a> 当前第" + pp + "页/共" + pageCount + "页"; } 随便粘贴的代码,大概就是这样子的 需要注意的时候,由于.net在回传的时候不保存当前页,所以如果使用按钮进行分页的时候需要使用ViewState来保存页数,每次只读取所需要的几条记录,所以适合做大型网站数量比较大的时候使用,一般的分页都比较简单,如果有这种情况,比如说有10条数据,要求第一页显示2条,其他的页数都显示4条,那么就我们知道就显示3页就可以了,这个要怎么实现呢,其实这个只需要我们稍微判断下就可以了 代码: View Code public DataSet GetList(int pp) { string sql = null; DataSet ds = null; if (pp == 1 || pp == 0) { //第一页的时候显示2行数据 sql = "Select top 2 * from News" } else { //第二页的时候显示除了第一页的2条数据之外的前4条数据 if (pp == 2) { sql = "Select top 4 * from News where id not in(select top 2 id from News)"; } else { //第三页和之后的页显示 (pp – 2) *4 然后在加上第一页的2条,也就是(pp – 2) *4+2条数据之外的前4条数据 int rowLine = (pp – 2) *4+2; sql = "Select top pageSize * from News where id not in(select top rowLine id from News)" } } ds = SqlHelper.ExecuteDataSet(CommandType.Text, sql); return ds; } 然后在页面里我们要获得页数 int pageCount = (((count-2-1) /4) + 1)+1; 一般的情况下pageCount=((count-1) /4) + 1 在这里我们可以先去掉第一页显示的2条数据,然后进行分页,假如是2页,那么因为还有第一页,所以这里还需要在后面再加上一页,也就是 (((count-2-1) /4) + 1)+1; 另外一种分页方式就是使用.net提供的PageDataSource类来分页, PageDataSource是微软提供一个用于分页使用的类,集成了绑定控件的一些方法,在使用的时候,我们只需要从数据库读取我们所要的数据,绑定到PageDataSource即可,然后允许PageDataSource可以分页,指定当前页和每页要显示的数目,这样就可以很好的获得的总的数目,结合控件,ViewState就可以完成自定义分页视图,方法如下: PagedDataSource pageDataSource = new PagedDataSource(); pageDataSource.DataSource = NewsManager.GetNews();//所有记录 pageDataSource.AllowPaging = true; pageDataSource.PageSize […]
View DetailsC#图片处理之: 另存为压缩质量可自己控制的JPEG
处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件 使用C#很方便的就可以把多种格式的图片文件读到Bitmap对象中。一句话就够了,常见的格式都支持,诸如JPEG,BMP,PNG等等。 Bitmap bmp = new Bitmap("文件名"); 然后就是怎么处理这个图片的问题了,与本案无关,pass。 最后就是保存。JPEG虽然是有损压缩方案,但是它在缩减文件体积和尽可能好的保留原有信息的矛盾上很好的找到了平衡点,所以在很多情况下成为首选的保存方案。 C#当然不会无视这一点,Bitmap类提供了默认的另存为JPEG的方法: bmp.Save("输出文件", System.Drawing.Imaging.ImageFormat.Jpeg); 这样当然很方便,但有时候更在乎文件体积而有时候更在乎图像质量,是不是有什么办法可以让自己来控制压缩质量呢? 答案是肯定的,bmp.Save方法中有个重载用到了EncoderParameters参数。我们可以在这个参数中加入自己的控制质量。 /**//// <summary> /// 保存JPG时用 /// </summary> /// <param name="mimeType"></param> /// <returns>得到指定mimeType的ImageCodecInfo</returns> private static ImageCodecInfo GetCodecInfo(string mimeType) { ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in CodecInfo) { if (ici.MimeType == mimeType) return ici; } return null; } /**//// <summary> /// 保存为JPEG格式,支持压缩质量选项 /// </summary> /// <param name="bmp"></param> /// <param name="FileName"></param> /// <param name="Qty"></param> /// <returns></returns> public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty) { try { EncoderParameter p; EncoderParameters ps; […]
View Details