摘要: 页面和页面之间传参数可以通过url,也可以通过form来传值,今天总结的是另外一种,跨页传参。服务器Button有一个PostBackUrl属性,这个是用来回传的,直接写代码算了。一、请求页面:HTML<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ResponseUrl.aspx.cs" Inherits="MyWeb.P...阅读全文
posted @ 2008-12-05 20:55 极品菜鸟 阅读(3363) 评论(4) 编辑
摘要: 今天学了点小东西,其实这也就是一些小技巧,平时没有做总结,今天小结一下:一、数据绑定的格式问题:一个商品的价格(1000),我们平时做数据绑定时,一般都这样<%#Evalu("Price")%>,值显示出来一般都是1000,今天要求显示的格式为1,000.00,像这样的格式,以前是先对这个价格进行处理之后再进行绑定,后来发现没有这个必要,只需要这样<%#Evalu("Price"...阅读全文
posted @ 2008-11-27 20:48 极品菜鸟 阅读(130) 评论(0) 编辑
摘要: 今天想做一个发邮件的功能,找了很多资料,也没有实现功能描述:一个商品显示页面,里面有一个按纽,点击这个按纽,让用户输入邮箱地址,然后将这个商品页面发到用户的邮箱里。我做的是向这个页面发送请求,将请求的页面内容做为邮件内容(发邮件的细节我就不班门弄斧了),问题出现了,就是本页面的图片链接的地址不是协议地址(如http://www.cnblogs.com/images/a.jpeg),而是图片的相对目...阅读全文
posted @ 2008-11-25 20:27 极品菜鸟 阅读(426) 评论(7) 编辑
摘要: 今天终于注册成功了,可喜可贺。。同事说csdn里的都是菜鸟,cnblogs里的都是高手,想了一想,我是一只菜鸟,不过我还是来这里了。。我想找高手,也希望成为高手。。。我是一只小菜鸟,一只快乐的小菜鸟,希望有一天能成为高菜鸟。。希望大伙支持我,来看的人都要留一句话哟,菜鸟需要你们的鼓励。。阅读全文
posted @ 2008-11-24 21:22 极品菜鸟 阅读(179) 评论(10) 编辑
这里总结了一下比较常用的服务器控件导出成excel报表的经验与大家分享:
以前做excel报表导出的时候是自己一个一个地画表格,然后将数据组装,再用微软的excel组件来输出excel文件。
字段少还没关系,字段多了,一个一个地去拼,数据要一一对应,我的那个天啊!
俗话说“不会偷懒的程序员,不是一个好的程序员”,程序员就是为了那些懒人来服务滴(纯属个人总结,如有雷同,均出自此处)!所以要想尽各种办法来偷懒,那有没有好的办法,我在页面上看到什么,就一次性全部导出成excel文件呢?包括样式?毫无一问,回答当然是肯定的,要不要不会写这个总结了。。
OK,闲话少说,直接帖代码算了:
比较常用滴:
grideview报表导出:

protected void Button1_Click(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "XMLFile1.xml");
            GridView1.DataSource = ds;
            GridView1.DataBind();

            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");
            Response.Charset = "gb2312";
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
            EnableViewState = false;
            GridView1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());
            Response.End();
        }

如果你这样做了,你会得到一个很郁闷的错误提示:

Control 'CTTest1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

解决这个的办法有一个:
public override void VerifyRenderingInServerForm(Control control)
        {
        }
加上上面这个重写的代码后,就能保存为excel文件了,是不是很爽啊?
那么不这样写可不可以呢?
回答当然也是肯定的:
办法就是:
不要使用gridview这个东东来绑定数据,用大伙比较喜欢的:Repeater控件来绑定程序!
代码还是一样滴:
Code:
protected void Button1_Click(object sender, EventArgs e)
        {

DataSet ds = new DataSet();
            ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "XMLFile1.xml");
            GridView1.DataSource = ds;
            GridView1.DataBind();

            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");
            Response.Charset = "gb2312";
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
            EnableViewState = false;
            GridView1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());
            Response.End();
}
HTML:

<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr><td>姓名</td><td>年龄</td></tr>
</HeaderTemplate>
<ItemTemplate>
<tr><td><%#Eval("name")%></td><td><%#Eval("age")%></td></tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

这样导出成excel报表就没问题了。
其实有时候你会发现,如果你导出来的表格出现了乱码,这就很郁闷了,年龄列的表头名字为:“骞撮緞”,这是个什么编码?
我又不是神仙,我怎么知道,于是又想了个办法,代码如下:
        static void Main(string[] args)
        {
            string sttest = "骞撮緞";
            EncodingInfo[] infoList=Encoding.GetEncodings();
            foreach (EncodingInfo encode in infoList)
            {
                byte[] buffer1 = encode.GetEncoding().GetBytes(sttest);
                string strBuffer = Encoding.UTF8.GetString(buffer1);
                Console.WriteLine("Encoding={0},编码为:{1}", encode.Name.ToString(), strBuffer);
            }

乖乖啊,乱码一大堆,不过如黑暗中见一丝曙光,有几个是“年龄”,于是挑了一个比较熟悉的编码:“GB18030”,于是将代码改成如下:

 protected void Button1_Click(object sender, EventArgs e)
        {
            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");
//网站编码
            Response.Charset = "utf-8";
//输出编码
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB18030");
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
           
            Repeater1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());
            Response.End();
        }

OK,一切搞定了,这个世界终于安静下来了!
从此以后,大伙导出excel就是成事不求人了!

posted @ 2009-08-24 15:34 极品菜鸟 阅读(2740) 评论(23) 编辑
摘要: 基类:[代码]Item对象:[代码]ItemCategory对象:[代码]ItemImg对象:[代码]ItemSearch对象:[代码]Postage对象:[代码]PostageMode对象:[代码]Sku对象:[代码]阅读全文
posted @ 2009-08-20 19:37 极品菜鸟 阅读(600) 评论(0) 编辑
摘要: 淘宝API工具类:[代码][代码][代码]阅读全文
posted @ 2009-08-20 19:23 极品菜鸟 阅读(886) 评论(0) 编辑
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Xml;
  6 using System.Xml.Serialization;
  7 using System.IO;
  8 
  9 namespace TaoBao.API.Common
 10 {
 11     /// <summary>
 12     /// 操作XML常用方法集合
 13     /// </summary>
 14     public class XMLCommon
 15     {
 16 
 17         /// <summary>
 18         /// 将XML文档转换成实例对象
 19         /// </summary>
 20         /// <typeparam name="T">对象类型</typeparam>
 21         /// <param name="pmFileName">文件名</param>
 22         /// <returns>实例对象</returns>
 23         public static T DeserializeFile<T>(string pmFileName)
 24         {
 25             FileStream fs = new FileStream(pmFileName, FileMode.Open);
 26             XmlSerializer xs = new XmlSerializer(typeof(T));
 27             T tObjext = (T)xs.Deserialize(fs);
 28             fs.Close();
 29             fs.Dispose();
 30             return tObjext;
 31         }
 32         
 33         /// <summary>
 34         /// 将实例对象写入XML文档
 35         /// </summary>
 36         /// <typeparam name="T">对象类型</typeparam>
 37         /// <param name="pmFileName">文件名</param>
 38         /// <param name="pmT">实例对象</param>
 39         public static void SerializeFile<T>(string pmFileName, T pmT)
 40         {
 41 
 42             XmlSerializer serializer = new XmlSerializer(pmT.GetType());
 43             TextWriter writer = new StreamWriter(pmFileName);
 44             serializer.Serialize(writer, pmT);
 45             writer.Close();
 46         }
 47  
 48 
 49         /// <summary>
 50         /// 将XML字符串转换成对象
 51         /// </summary>
 52         /// <typeparam name="T">对象类型</typeparam>
 53         /// <param name="pmXMLString">XML字符串</param>
 54         /// <returns>实例对象</returns>
 55         public static T DeserializeXML<T>(string pmXMLString) {
 56 
 57             XmlSerializer xs = new XmlSerializer(typeof(T));
 58 
 59             T tObjext = (T)xs.Deserialize(new StringReader(pmXMLString));
 60             return tObjext;
 61         }
 62 
 63 
 64         public static string SerializeString<T>(T pmObject) {
 65 
 66             StringBuilder sb = new StringBuilder();
 67             XmlSerializer xc = new XmlSerializer(pmObject.GetType());
 68             System.IO.MemoryStream memory = new MemoryStream();
 69             System.Xml.XmlTextWriter xmltext = new System.Xml.XmlTextWriter(memory,Encoding.Default);
 70             xc.Serialize(xmltext, pmObject);
 71             xmltext.Close();
 72             memory.Close();
 73 
 74             string reValue =Encoding.Default.GetString(memory.GetBuffer());
 75 
 76             return reValue;
 77         }
 78         /// <summary>
 79         /// 将Josn字符串转换成对象
 80         /// </summary>
 81         /// <typeparam name="T">对象类型</typeparam>
 82         /// <param name="pmXMLString">Josn字符串</param>
 83         /// <returns>实例对象</returns>
 84         public static T DeserializeJSON<T>(string pmXMLString)
 85         {
 86             XmlSerializer xs = new XmlSerializer(typeof(T));
 87             T tObjext = (T)xs.Deserialize(new StringReader(pmXMLString));
 88             return tObjext;
 89         }
 90 
 91 
 92         /// <summary>
 93         /// 将实例对象转换成键值对集合
 94         /// </summary>
 95         /// <typeparam name="T">对象类型</typeparam>
 96         /// <param name="pmT">实例对象</param>
 97         /// <returns>键值对集合</returns>
 98         public static Dictionary<string,string> DeserializeClass<T>(T pmT)
 99         {
100             //UTF8Encoding utf8 = new UTF8Encoding();
101             //Dictionary<string, string> reValue = new Dictionary<string, string>();
102             //string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff")+"xmlfile.xml";
103             //SerializeFile(filename, pmT);
104             //FileStream fs = new FileStream(filename, FileMode.Open);
105             //XmlDocument document = new XmlDocument();
106             //document.Load(fs);
107             //foreach(XmlNode child in document.DocumentElement.ChildNodes){
108 
109             //    reValue.Add(child.Name, utf8.GetString(utf8.GetBytes(child.InnerText)));
110             //}
111             //fs.Close();
112             //fs.Dispose();
113             ////File.Delete(filename);
114             //return reValue;
115 
116             UTF8Encoding utf8 = new UTF8Encoding();
117             Dictionary<stringstring> reValue = new Dictionary<stringstring>();
118             XmlDocument document = new XmlDocument();
119             document.LoadXml(SerializeString<T>(pmT));
120             foreach (XmlNode child in document.DocumentElement.ChildNodes)
121             {
122                 reValue.Add(child.Name, utf8.GetString(utf8.GetBytes(child.InnerText)));
123             }
124             return reValue;
125         }
126 
127         /// <summary>
128         /// 将键值对集合转成字符串
129         /// </summary>
130         /// <param name="pmDictionary">键值对集合</param>
131         /// <returns>字符串</returns>
132         public static string GetParams(IDictionary<stringstring> pmDictionary)
133         {
134             System.Collections.IEnumerator iter = pmDictionary.Keys.GetEnumerator();
135             System.Text.StringBuilder orgin = new System.Text.StringBuilder();
136             int i = 0;
137             while (iter.MoveNext())
138             {
139                 string name = (string)iter.Current;
140                 string value =System.Web.HttpUtility.UrlEncode(pmDictionary[name], System.Text.Encoding.UTF8);
141                 orgin.Append(name).Append("=").Append(value);
142                 if (i != pmDictionary.Keys.Count - 1) orgin.Append("&");
143                 i++;
144             }
145             return orgin.ToString();
146         }
147 
148     }
149 }
150 

 

posted @ 2009-08-20 19:04 极品菜鸟 阅读(592) 评论(0) 编辑

模板文件位于 D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\Web\CSharp\2052下

Class.zip解压后修改Class.cs,在头部加上

/* ***********************************************
 * author :  $username$
 * email  :  my@myemail.com
 * function:
 * history:  created by $username$ $time$
 * ***********************************************/

修改好后打包回去覆盖原来的Class.zip,然后在visual studuo的命运行下运行 devenv /setup 就可以使用了。


更正:

 

D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Code\2052 Class.zip解压后修改Class.cs

posted @ 2009-02-17 14:52 极品菜鸟 阅读(284) 评论(0) 编辑

 前几天CSDN论坛的首页,看到一则帖子,题目是:“一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) ”,链接如下:http://blog.csdn.net/gisfarmer/archive/2009/02/08/3869236.aspx

题如下:
把一张面值为一元的纸币,换成一分,二分,五分的硬币,共有多少种换法?编程输出每一种不同的算法。

这道题很简单,是最简单的C++题,用C也可以做。

 

看了原贴http://bbs.hackerxfiles.net/thread-98055-15-1.htmlhttp://blog.csdn.net/gisfarmer/archive/2009/02/08/3869236.aspx

里面有很多答案,说实在的,有点看不下去了,因为总感受写的代码有点别扭,做的一些循环都像是写死了的。。

比如:

  1. int x=0,y=0,z=0,n=0;   
  2.      int count=0;   
  3.   
  4.      for(z=1;z<20;z++)   
  5.      {   
  6.           for(y=1;y<=(100-z*5)/2;y++)   

我不知道z<20为什么要这么写,为什么是20呢?

还有就是如果如果再加一个一毛,或者是五毛,求共有多少种换法,这又怎么写呢?

又或者是分的不是一块钱,分的是五块钱,求共有多少种换法,又怎么写呢?

。。。哎,我也是写程序的,很怕业务的改变,所以在想,能不能写一个通用点的方法,于是自己写了一个如下,还请路过的指教一下(本人是菜鸟).

写了两个方法,一个需要输出明细,一个不需要输出明细,大家可以试着玩一下。。

 

c#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleStudy
{
    class SumNumberDemo
    {
        static void Main() {

            Console.WriteLine("SumNumberDemo");
            List<int> intList = new List<int>();
            string reString =string.Empty;
            int count = 0;
            intList.Add(1);
            intList.Add(2);
            intList.Add(5);
            //intList.Add(7);
            //intList.Add(9);
            //不需要输出明细
            SplitMoney(100, 0, intList, 0, ref count);
            //输出明细
            //SplitMoney(10, 0, intList, 0, reString, ref count);
            Console.WriteLine(string.Format("总共有{0}种分法",count));
        }

        /// <summary>
        /// 分钱方法
        /// </summary>
        /// <param name="pmMoney">被分的钱</param>
        /// <param name="pmMoneyNow">当前分法的钱的和</param>
        /// <param name="pmMoneyList">分钱列表</param>
        /// <param name="pmMoneyIndex">当前分钱索引</param>
        /// <param name="pmString">当前分法明细</param>
        /// <param name="pmSplitCount">分钱方法总数统计</param>
        static void SplitMoney(int pmMoney, int pmMoneyNow, List<int> pmMoneyList, int pmMoneyIndex, string pmString, ref int pmSplitCount)
        {
            int snCount=pmMoneyList.Count;

            if (pmMoneyIndex < pmMoneyList.Count)
            {
                for (int i = 0; i * pmMoneyList[pmMoneyIndex] <= pmMoney; i++)
                {
                    //当前和统计
                    int snSumNow = i * pmMoneyList[pmMoneyIndex]+pmMoneyNow;

                    //--begin----这个字符串主要是为了输出的,如果不要求输出可以注释掉----------------
                    string snString = string.Empty;
                    if (string.IsNullOrEmpty(pmString))
                    {
                        snString = string.Format("{0}*{1}",i, pmMoneyList[pmMoneyIndex]);
                    }
                    else {
                        snString = string.Format("{0}+{1}*{2}", pmString, i, pmMoneyList[pmMoneyIndex]);
                    }
                    //---end------------------

                    if (snSumNow == pmMoney)
                    {
                        //------begin-------------
                        for (int j = pmMoneyIndex+1; j < snCount;j++ )
                        {
                            snString += string.Format("+0*{0}", pmMoneyList[j]);
                        }
                        //-------end-------------
                        pmSplitCount++;

                        Console.WriteLine(string.Format("---{0}={1}---",snString,pmMoney));
                    }
                    else
                    {
                        SplitMoney(pmMoney, snSumNow, pmMoneyList, pmMoneyIndex + 1, snString, ref pmSplitCount);
                    }

                }
            }

        }

        /// <summary>
        /// 分钱方法
        /// </summary>
        /// <param name="pmMoney">被分的钱</param>
        /// <param name="pmNoneyNow">当前分法的钱的和</param>
        /// <param name="pmMoneyList">分钱列表</param>
        /// <param name="pmMoneyIndex">当前分钱索引</param>
        /// <param name="pmSplitCount">分钱方法总数统计</param>
        static void SplitMoney(int pmMoney, int pmNoneyNow, List<int> pmMoneyList, int pmMoneyIndex, ref int pmSplitCount)
        {
            int snCount = pmMoneyList.Count;
           
            if (pmMoneyIndex < pmMoneyList.Count)
            {
                for (int i = 0; i * pmMoneyList[pmMoneyIndex] <= pmMoney; i++)
                {
                    //当前和统计
                    int snSumNow = i * pmMoneyList[pmMoneyIndex] + pmNoneyNow;
                    if (snSumNow == pmMoney)
                    {
                        pmSplitCount++;
                    }
                    else
                    {
                        SplitMoney(pmMoney, snSumNow, pmMoneyList, pmMoneyIndex + 1, ref pmSplitCount);
                    }
                }
            }

        }
    }
}

 

posted @ 2009-02-10 12:45 极品菜鸟 阅读(1710) 评论(5) 编辑

 

<form  id="myForm" runat="server">
    <div>
    <input type="file" name="updFile" id="updFile" onchange="Change()"/>
    </div>
    <div id="imgFiles"></div>
    <script type="text/javascript">
        function Change() {

            var x = document.getElementById("updFile");
            var imgAll = document.getElementById("imgFiles");
           
            if (!x || !x.value) return;
            var patn = /\.jpg$|\.jpeg$|\.gif$/i;
            if (patn.test(x.value)) {
                var y = document.getElementById(x.value);
                //判断原图片是否存在,如果存在,则不加载进来
                if (y) return
                var newFileName = document.getElementById("updFile").value;
                var imgHtml = "<div><h1 id=\"" + newFileName + "\" style=\"border: 1px solid black; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);width: 100px; height: 100px\"></h1><INPUT type=\"button\"  NAME=\"Delete\" value=\"删除\" onclick=\"delFile(this)\"></div>";
                var objFiles = document.getElementById("imgFiles");
                document.getElementById('imgFiles').insertAdjacentHTML("beforeEnd", imgHtml)

                document.getElementById(newFileName).filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = newFileName;
                document.getElementById(newFileName).style.width = document.getElementById(newFileName).offsetWidth;
                document.getElementById(newFileName).style.height = document.getElementById(newFileName).offsetHeight;
                document.getElementById(newFileName).filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "scale";
            }
            else {
                alert("您选择的似乎不是图像文件。");
            }

        }
        function delFile(obj) {
            obj.parentElement.removeNode(true);
        }
        </script>
</form>

posted @ 2008-12-30 17:07 极品菜鸟 阅读(1196) 评论(3) 编辑
摘要: 觉得自己好多东西都不懂,想学又找不到方法,终于觉得自己还没有入门.技术这东西,总是要看了别人写的东西才知道自己的差距有多大,技术可以学,思想不是一件好学的东西.工作以后,再也不能像学生时代那样,还有老师一把手一把手地教自己了,一切都要自己去思考,自己去学习,觉得好难好难.今天看了微软高级讲师讲的demo,越发觉得自己学的东西真是太少了,很受打击!阅读全文
posted @ 2008-12-11 21:29 极品菜鸟 阅读(118) 评论(6) 编辑
摘要: 引用地址:http://www.cnblogs.com/xingd/archive/2008/02/01/1061800.html 主要是参考上面的代码改的,bool的那个方法基本上没有改,string的那个方法是我参照bool的方法改的.原楼主只写了一些片段(核心代码),楼主主要是实现了检测是不是含有脏字,并没有替换,相信大家都会改,但即使简单,也是需要人做的,再说了,这么简单的事情,大鸟,大侠...阅读全文
posted @ 2008-12-10 17:31 极品菜鸟 阅读(995) 评论(8) 编辑
摘要: 页面和页面之间传参数可以通过url,也可以通过form来传值,今天总结的是另外一种,跨页传参。服务器Button有一个PostBackUrl属性,这个是用来回传的,直接写代码算了。一、请求页面:HTML<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ResponseUrl.aspx.cs" Inherits="MyWeb.P...阅读全文
posted @ 2008-12-05 20:55 极品菜鸟 阅读(3363) 评论(4) 编辑