posts - 7,comments - 4,trackbacks - 0

早安,2007
一个不留神,双脚已踏入了2007,没有太大的期望,也没有太多的幻想,只想老老实实地做好工作,快快乐乐回家过年,接受了现实,也停止了梦想。
过年
一直是个开心的代名词,新衣新帽新气象,好像一切都可以重新开始,但,发现我的心还停在昨天,不懂得回来。还好,可以和家人团圆,和朋友同学相聚,一切都是很美好。
开工
新的一年,工作没有新的开始,项目依旧没有更好的进展,自己也向公司说明实际情况,一个人负责不了全局,没有得到更好的业务帮助,一期工作总算粗略完成了,但二期工作不知如何开展,再加上项目得不到上头重视,心好累了。
失眠
那时,很流行失眠,分不清什么原因了,就是想失眠。也许,工作上没起色,也许心已累,也许隔壁很吵,也许想逃离。
离开
求学和工作,在广州差不多呆了五年,还来不及多考虑,辞职的第二天就离开了,没有更多的不舍,只想静静地离开。那时,广州好像伤城一样,今天,我却时刻想着回去。
变迁
没有太大的变迁,只是换了工作地方,离广州只有半个小时的车程,工作性质没变,依旧是MIS开发,还是用C#,只是webForm转到winForm,没有太大的不适,很容易上手就可以做项目了,没有太多的不习惯,一切都很容易融入新的生活环境,这里没有闹市的繁荣,只有乡间的恬静,晚上可以闻虫吟赏星辰,失眠有了很好的改善。
激情
新的工作,总会带来新的挑战,触发更大的激情,每天都在忙碌中渡过。也开始了漫长的Debug工作,每次为客户解决一个问题,心里就能感觉到自己存在的价值。
冷却
过份地爆发,只会加快平静地到来。日复一日地做后期维护工作,已麻木起来了。怨声少了,叫骂也停了。程序员最痛苦的事就是维护别人没有规范的代码,比这更痛苦的事就是维护没需求文档和注释的代码。心里知道,现在有很大部分程序员都在干这事,自己也认了,自己也认知到文档的重要性,以后尽量做到代码注释文档同步,少让一个程序员干这累人的事。
出差
第一次,总是那么地笨拙。早上七点的火车,由于看错时间,四点就打电话给司机,搞得司机糊里糊涂的,在街上还被巡警查这查那,最后总算没误时,顺利出差了。呆了一星期,原来出差就是这样子。之后的几次出差,也是平平淡淡了,现在,可以不出差就不想出差了。
吞并
由于种种原因,全集团内更换程序,我们被打败了。最最最上头的一句话,全集团内的差不多一百个厂用新程序,我们做起了新程序的实施员,开始了一个多月的流浪生活,到各分厂去实施。
浴火
经理给我们三个月的时间学C++,能力达到者可以转入C++项目,工资也会提升一个档次。接下来,每天都没有计划地进行,除了一些突发任务就是学习看书。
返朴
开始看《window程序设计》,知道了比.NET开发更需理解的东西,知道了窗体如何炼成的,懂得了程序如何诞生的,一切都是那么的原始,也让自己感觉像真正地在编程了。看《MFC深入浅出》,也知道用VC如何做界面,document/view地完美,也开始感叹框架缔造者的高超,我想,以后将是框架盛行的时期了。
重生
上头公司立项做厂内部ERP软件,开发环境又回到.NET。
年结
又买了几本厚书<frameWork的设计与应用> <sql server2005从入门到精通> <vc++.net技术内幕>,帮朋友做了几个小网站,用到了asp.net2.0,JQuery,php,ext,asp,就剩jsp,我想明年也会搞一点点的。今年阅读英语文章稍微多了起来,但感觉进步不大。和客户面对面沟通多了一些,但还是放不开。也了解了很多新技术,但都停留在应用上。越来越多知识需要学习,时而担忧时而高兴起来了。现在也不敢做太多地计划了,计划是永远赶不上变化,只希望做个合格的程序员。
晚安,2007。

 

 

 

 

 

 

 

 

 

 


 

posted @ 2007-12-29 22:06 Share赖 阅读(27) | 评论 (0)编辑

这两天忙着给越南那边的程序翻译,一个头变成两个了,自己的英语水平只能用三脚猫来形容,再加上对制版的专业用语不熟,金山词霸,goolge翻译,CSND英语栏目,全部多线程开着,哈哈,听几门牌了。下午接到短信开发新任务,用的是深圳商悦GSM猫,五百来块,也不算贵,相当于一部低档手机,再通过串口和PC连接,我需要做的就是做个接口给程序调用,可以发短信和接收短信,然后作处理记录保存在数据库里,也谈不上有难度,不就是接和发,哈哈,信心十足地跟老大把任务接了下来。自己知道这些硬件商都有提供demo和文档给开发者,大概看一下就明白。打开光盘发现没有c#的demo,只有vb.net的,没计啦,再装个VB.NET,打开vb.net的demo,唉,对VB.NET代码不敢恭维啊,密密麻麻地涂在一起,还好,自己不是学vb.net的,不然会没有学下去的欲望。没办法,还得硬着头皮看一下代码,知道了主要是Axalasun.Axalasunsms这个类。
整个步骤如下:
一、注册两个COM
regsvr32.exe c:\winnt\system32\alasunsmscon.ocx
regsvr32.exe c:\winnt\system32\mscomm32.ocx
二、在工具箱上添加选项
在com组件选项卡里选中Alasun SMS Control
三、把这个控件拖到窗体中
窗体代码自动生了private Axalasun.Axalasunsms axalasunsms1 = new Axalasun.Axalasunsms();//这个是主角,刚开始不知道,花了一个来小时寻找它
四、开始对这个实例对象操作了
axalasunsms1.OpenComm();//打开GSM猫
axalasunsms1.ReadMsgByIndex(..);//读信息
axalasunsms1.SendMsg(...);//发送信息
axalasunsms1.CloseComm();//关闭猫猫

总结:
1、开始直接在项目里引用COM,以为在代码可以自动找到主角类,搞了半天也找不到,后来把它放在工具箱再拖到窗体中才可以。
2、发送信息时,不懂手机中心号码是什么,信息提示发出去了,但是收不到,以为手机卡没钱了,反复拔插了几次,最终是中心号码设置错了。
3、当手机收到信息时,不能触发OnReceive事件,这个得问一下别人,如果不行的话,只能靠线程定时读取猫了,这样会消耗点性能。
4、总体来说还不错,一个下午搞懂一个小知识点,以后大有所用。
待续...

posted @ 2007-06-30 21:34 Share赖 阅读(221) | 评论 (2)编辑

用c#做winForm,一个字“很慢”,大都数人都在叫BILL骂dotNet框架,我没骂,但埋怨过,有网友说过,MS是大哥,大哥没有错,

有错也是我们的错。其实主要还是我们的开发功夫没到家,UI界面处理上没有把握好,很多时候打开窗体出现假死机现象,间接影响

了中国的国民收入,原因就不说了,也说不完的。
这篇文章的出生,主要因昨晚偶和BackgroundWorker组件的懈逅,在webcast上知道有这个组件,经过数分钟的众里寻它千百度,没

错,我用的是百度,终于把它一层层华丽的衣裳剥去,只剩下DoWork和RunWorkerCompleted两个中心(事件),

WorkerSupportCancellation 一个基本点(属性)

让我们开始用艺术的眼光欣赏了

第一步:
把它请到我们的窗体上
第二步:
轻轻点击它的两个中心,生成两个事件方法
第三步:
设置WorkerSupportCancellation为true,不true就不是重点了啊。

老毛说过,没有实践就没有发言权,接下来是时候动手了,用代码说话吧!


public partial class Form1 : Form
    
{
        
private DataTable dt;
        
public Form1()
        
{
            InitializeComponent();
        }


        
private void Form1_Load(object sender, EventArgs e)
        
{
            backgroundWorker1.RunWorkerAsync();
        }


        
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        
{
            dt 
= db.getDT("server=(local);database=test;uid=sa;pwd=""select top 10 * from tbl");
        }


        
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        
{
            dataGridView1.DataSource 
= dt.DefaultView;
        }

    }
posted @ 2007-06-28 16:13 Share赖 阅读(206) | 评论 (0)编辑

程序员的工资少,所以代码也不想写多,搞了几行就把导出Excel功能实现了!-_-#
这个也可以重写一下,换成控件导出Excel,只要取出DataSource就行了,原理一样!

public static void ExportExcel(DataTable eDataTable) 
        
{
            
try
            
{
                Excel.ApplicationClass ExcelApp;
                ExcelApp 
= new Excel.ApplicationClass();
                Excel.Workbook ExcelBook 
= ExcelApp.Workbooks.Add(1);
                Excel.Worksheet ExcelSheet 
= (Excel.Worksheet)ExcelBook.Worksheets[1];

                ExcelApp.Visible 
= true;

                
//写列标题
                for (int i = 0; i < eDataTable.Columns.Count; i++)
                
{
                    ExcelSheet.Cells[
1, i + 1= eDataTable.Columns[i].ColumnName;
                }


                
//写值
                for (int r = 0; r < eDataTable.Rows.Count; r++)
                
{
                    
for (int i = 0; i < eDataTable.Columns.Count; i++)
                    
{
                        ExcelSheet.Cells[r 
+ 2, i + 1= eDataTable.Rows[r][i];
                    }

                }



            }

            
catch (Exception ex)
            
{
                ErrLog.ExcelErr(ex.ToString());
            }

            
finally
            
{
                GC.Collect();
            }

        }
posted @ 2007-06-25 11:08 Share赖 阅读(619) | 评论 (1)编辑
     摘要: 今早又一杰作,虽然不完美,但还凑合用,不作过多注释,给初学者动脑筋的机会,学会看懂别人的代码和思路,特别像我这些土代码,更可以磨练你的耐心 -_-#1 Grid 实体类1publicclassGridEntity2{3publicGridEntity()4{5}67privatestring_GridName;8privatestring_DataPropertyName;9privatestri...  阅读全文
posted @ 2007-06-20 11:30 Share赖 阅读(1233) | 评论 (1)编辑

     今天下午花了两个小时写的,感觉很不错!
        /// <summary>
        /// TreeView checked事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvMenu_AfterCheck(object sender, TreeViewEventArgs e)
        {
            CheckAll(e.Node);
        }

        /// <summary>
        /// 全部节点check处理
        /// </summary>
        /// <param name="eTreeNode"></param>
        private void CheckAll(TreeNode eTreeNode)
        {
            tvMenu.AfterCheck -=new TreeViewEventHandler(tvMenu_AfterCheck);
            if (eTreeNode.Parent != null)
            {
                CheckParent(eTreeNode);
            }
            if (eTreeNode.Nodes.Count > 0)
            {
                foreach (TreeNode mTN in eTreeNode.Nodes)
                {
                    mTN.Checked = eTreeNode.Checked;
                   
                    foreach (TreeNode mTNSub in mTN.Nodes)
                    {
                        mTNSub.Checked = mTN.Checked;
                        CheckSub(mTNSub);
                    }
                }
            }
           
            tvMenu.AfterCheck += new TreeViewEventHandler(tvMenu_AfterCheck);
        }
        /// <summary>
        /// 父节点处理
        /// </summary>
        /// <param name="eTreeNode"></param>
        private void CheckParent(TreeNode eTreeNode)
        {
            if (eTreeNode.Parent == null)
            {
                return;
            }
           
            eTreeNode.Parent.Checked = eTreeNode.Checked;
           
            foreach (TreeNode mTN in eTreeNode.Parent.Nodes)
            {
                eTreeNode.Parent.Checked = (eTreeNode.Parent.Checked || mTN.Checked);
                if (mTN.Parent != null)
                {
                    CheckParent(mTN.Parent);
                }
            }
        }
        /// <summary>
        /// 子节点处理
        /// </summary>
        /// <param name="eTreeNode"></param>
        private void CheckSub(TreeNode eTreeNode)
        {
            foreach (TreeNode mTN in eTreeNode.Nodes)
            {
                mTN.Checked = eTreeNode.Checked;
                CheckSub(mTN);
            }
        }

posted @ 2007-06-16 18:04 Share赖 阅读(117) | 评论 (0)编辑

最近一段时做数据导入,主要是涉及到Cell表的赋值,因为Cell的参数项很多加上得去判断每个参数标识,所以必须写很多if语句,第一张表就有上几十个了,看起来感觉挺不舒服的,必须得优化一下,碰巧在QQ群里聊到,有朋友提示了用Hashtable类(感谢一下网友),自己也如获似宝,马上去MSDN搜了一下,了解了一下,整理一下思路,也能实现大概功能。用法如下:
定义:
Hashtable myHT = new Hashtable();
myHT.add("strCondition1","strValue1");
myHT.add("strCondition2","strValue2");
......
运用:
string strName//临时变量
if(myHT[strName] != null)//表示在myHT中能找到对应值
{
   strTemp = myHT[strName].ToString();
}
等同于:
if(strName == "strValue1")
{
  strTemp = "strValue1";
}
if(strName == "strValue2")
{
  strTemp = "strValue2";
}
.....

PS:如果if语句很多的话,Hashtable绝对好用,性能也很高(网友说的),自己不会怎样测试-_-#

posted @ 2006-02-20 20:35 Share赖 阅读(233) | 评论 (0)编辑