posts - 3,  comments - 0,  trackbacks - 0
公告
  2010年10月28日

【IT168 管理文档】    一直都在说,ERP项目经理很难培养出来,而且在软件行业一直都是抢手的人才,无论是在研发,还是项目实施领域,都需要大量的项目经理来对项目进行把控。也有很多人说,项目经理不只只是做的技术活,更多的像是在做一门艺术类的活,这个观点我同意。因为项目管理需要讲究的是平衡之道,需要直觉,判断和经验,在各个环节进行平衡,才能保证项目的最终成功。从平衡的角度而言,项目管理需要进行如下的平衡:

    1. 自我/无我。项目经理对自己的项目实施进行了大量的投入,倾注了大量的心血,这种情感联系正是其获得项目成功的源动力,也能够从自己的工作中得到极大的成就感。但同时,项目经理必须避免把自己的利益放在项目之前,愿意把一些有趣的或者是重要的任务分派出去,与团队的成员共同去赢得荣耀。自我意识可以对项目形成有利的刺激因素,但项目经理也必须认识到,自我意识是否会对项目形成阻碍。

    2. 独裁/委派。项目在很多情况下,需要的是明确的职责以及快速的反应,项目经理应该有足够的自信,有足够的意愿掌控团队,并使团队执行特定的行动。然而,整体目标应该避免这些极端的情况出现。管理良好的项目应该建立一种环境,使得工作可以被委派出去,同时又能有效共同协作。

    3. 忍受含糊/追求完美。任何项目初期都是高度开放与变动的,未知的事物反而比已知的事物重要。妥善控制的含糊是优良想法浮现的关键。因此项目经理如果不去驾驭它,就必须尊重它。但在其它的时候,特别是项目后期,纪律和精确是至高无上的。需要有足够的智慧分辨何时花时间追求完美,而时采用平凡或应急的解决方法。

    4. 口头/书面。尽管大多数软件项目组织以电子邮件为中心进行沟通,口语技巧对于项目管理却显的特别重要。总是要开会、协商、讨论以及头脑风景,而且项目经理在面对了解和沟通想法方面必须要有效率。组织或项目规模越大,书面技巧就越重要。无论项目经理的个人如何喜好,他都必须认识到何时书写或口头沟通更有效。

    5. 承认复杂/拥护单纯。许多人会成为复杂性的牺牲品。当他们面对复杂的工作挑战时,就会在细节里忘记了大的结构。其他人则是一味否认复杂性而作出不良决策,因为他们没有充分了解所牵涉事项的细节之处。此处平衡的作法,是要认识到哪个项目观点对解决手中问题或决策最有用,同时还要在两者之间自由转换或同时记在心中。(要求有点高)。项目经理必须要有足够的说服力,让团队为他们的工作追求单纯,而不是去一头掘进复杂性中。

    6. 不耐烦/有耐心。多数的时候,项目经理是敦促它人专心工作的推手。但是在某些情况下,不耐烦会对项目不利。有一些政治性、跨组织或官僚性的活动,是无可避免的时间陷阱,要有人参加会议,而对项目无所帮助,这个时候就需要耐心。所以,知道何时推动问题,同时该退一步让一些事情发生,这是项目经理必须具体的判断力。

    7. 勇气/恐惧。勇者无惧为人的优良品质。但这往往是骗人的,勇者是会感到害怕但依然会采取行动的人。项目经理必须对所有会出错的事情保持适合的重视。把这些事情视为完全可能发性,这也就是面对风险的勇气。害怕风险,但勇于面对。

    8. 相信/怀疑。受人拥护,并且相信自己是团队的领导者,就是团队斗志的最大来源。项目经理要对自己所做的事情有信心,这很重要,而且看得见即将达成的目标的真实价值。同时,也必须对事情的进展以及事情的做法保持怀疑心。必须和人去探讨及提问,揭开假设,把困难问题引导出来。需要热切提问,挑战他人的假设,但不动物团队对所做事情的信念。

    看看写了这么多,项目经理是一门艺术,的确,要做好项目经理不太容易。

posted @ 2010-10-28 17:17 FantasticGOD 阅读(123) 评论(0) 编辑
  2010年3月4日

  最近,工作安排,要我研究dev控件。。。项目没开始,被要求搞研究。。。界面

  dev的控件表现效果及实用功能都是蛮方便和强大的。gridcontrol中有5种view 型式,普通的是gridview,然后分别为cardview、BandedView、Advanced BandedView、LayoutView;共5种。gridview跟WinForm自带的差不多,有一些高级特性,比如说可以把某一列拿出来分组啊,之类的。我这几天主要研究了这三个:LayoutView、BandedView、AdvancedBandedView。

  LayoutView实现的视觉效果可以说很。。。炫~(我们做应用行业软件的。。项目组长却要求这么炫的效果。。。我觉得他是想不开。。。)

  仔细看了dev的demo源代码,实际上这里只需要在gridcontrol 中 的designer中 的view组中把OptionView下的viewmode 设置成“Carousel”就达到这种“旋转木马”式的gridcontrol view 特效了。。。

  关键部分还是细节,layoutView1.OptionsCarouselMode.PitchAngle 这个属性决定“旋转木马”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 倾角; 节锥半角   【主科技词汇】   。。。

  Roll Angle 属性决定着 倾侧角度~~其它的属性都好说。

  然后就是columns的设置问题了,设置column的长高啊什么的,现在还没完全弄明白~~。。。有时候设置了,coumn没变。。。反正要想真正达到图片中的那种效果,得很细心的搞一下才行。

  将其设置为图片类型的时候,是比较痛苦的事情。我开始以为在给gridcontrol的datatable里面设置一列为路径 string 就够了~结果试了半天(没办法,源码里面调用的是xml文件!~~图片是Int64类型的,刚开始没仔细看。。),在csdn搜到了。。。

//显示数据
        private void showData(List<Employee > list)
        {
            DataTable dt = new DataTable("OneEmployee");
            dt.Columns.Add("Caption", System.Type.GetType("System.String"));
            dt.Columns.Add("Department", System.Type.GetType("System.String"));
            dt.Columns.Add("PhotoName", System.Type.GetType("System.Byte[]"));

            for (int i = 0; i < list.Count; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Caption"] = list[i].Name;
                dr["Department"] = list[i].Department;
                string imagePath = @"D:\C#\photos\" + list[i].PhotoPath;
                dr["PhotoName"] = getImageByte(imagePath);
                dt.Rows.Add(dr);
            }
            gridControl1.DataSource = dt;
        }

        //返回图片的字节流byte[]
        private byte[] getImageByte(string imagePath)
        {
            FileStream files = new FileStream(imagePath, FileMode.Open);
            byte[] imgByte = new byte [files.Length ];
            files.Read(imgByte, 0, imgByte.Length);
            files.Close();
            return imgByte;
        }

来自CSDN博客,转载请标明出处:http://blog.csdn.net/alen0707/archive/2009/05/20/4203807.aspx

 

必须转换成2进制数组,属性为pictureedit的column才能认~~~,then,基本上完成。。。LayoutView~

posted @ 2010-03-04 11:52 FantasticGOD 阅读(2410) 评论(0) 编辑
  2009年12月29日

转自搜狐博客,作者:风的灵动

2009-12-20 | C#读写XML文件

 

一.前言:

XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了。本文将指导大家如何运用C#语言完成.Net框架下的XML文档的读写操作。 首先,我会向大家介绍.Net框架中与XML相关的命名空间和其中的重要类。其次,我还会给出有关的实例以使读者更进一步的了解XML文档的读写操作的具 体方法。

二.XML命名空间和相关类简介:

在深入进行.Net框架下的XML文档的操作之前,我想很有必要向大家介绍.Net框架中与XML技术 有关的命名空间和其中一些重要的类。.Net框架为我们提供了以下一些命名空间:System.Xml、System.Xml.Schema、 System.Xml.Serialization、System.Xml.Xpath以及 System.Xml.Xsl来包容和XML操作相关的类。

System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相 关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、 XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文将重点介绍这些类,因为它们是最基本也是最重要的类。

XmlReader类是一个虚基类,它包含了读XML文档的方法和属性。该类中的Read方法是一个基 本的读XML文档的方法,它以流形式读取XML文档中的节点(Node)。另外,该类还提供了ReadString、ReadInnerXml、 ReadOuterXml和ReadStartElement等更高级的读方法。除了提供读XML文档的方法外,XmlReader类还为程序员提供了 MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、 MoveToElement以及 MoveToNextAttribute等具有导航功能的方法。在本文后面介绍的实例中,我们将运用到这些方法。

XmlTextReader、XmlNodeReader以及XmlValidatingReader等类是从XmlReader类继承过来的子类。根据它们的名称,我们可以知道其作用分别是读取文本内容、读取节点和读取XML模式(Schemas)。

XmlWriter类为程序员提供了许多写XML文档的方法,它是XmlTextWriter类的基类,我在后面的实例中会给出相关的运用方法。

XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节 点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的 类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括: XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档, 它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、 说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。 XmlDataDocument类可以让程序员更好地完成和ADO.NET中的数据集对象之间的互操作。

除了上面介绍的System.Xml命名空间中的类外,该命名空间还包括了XmlConvert、XmlLinkedNode以及XmlNodeList等类,不过这些类不是本文介绍的重点,有兴趣的读者不妨去参考相关文档资料。

System.Xml.Schema命名空间中包含了和XML模式相关的类,这些类包括XmlSchema、XmlSchemaAll、XmlSchemaXPath以及XmlSchemaType等类。

System.Xml.Serialization命名空间中包含了和XML文档的序列化和反序列化操作相关的类,XML文档的序列化操作能将XML格式的数据转化为流格式的数据并能在网络中传输,而反序列化则完成相反的操作,即将流格式的数据还原成XML格式的数据。

System.Xml.XPath命名空间包含了XPathDocument、 XPathExression、XPathNavigator以及XPathNodeIterator等类,这些类能完成XML文档的导航功能。在 XPathDocument类的协助下,XPathNavigator类能完成快速的XML文档导航功能,该类为程序员提供了许多Move方法以完成导航 功能。

System.Xml.Xsl命名空间中的类完成了XSLT的转换功能。

三.读XML文档的方法:

在介绍完.Net框架中和XML有关的命名空间和相关类后,我接着向大家介绍和XML相关的一些操作。 首先,我向大家介绍的读取XML文档的方法。在下面的实例程序中,我将运用VS.net开发工具附带的"books.xml"文件来作为示例。你可以在你 的机器上搜索到该文件(或请参考附录),或者你也可以运用其他的XML文件。

首先,我们用XmlTextReader类的对象来读取该XML文档。方法很简单,就是在创建新对象的构造函数中指明XML文件的位置即可。

XmlTextReader textReader = new XmlTextReader("C:\\books.xml");

一旦新对象创建完毕,你就可以调用其Read方法来读取XML文档了。调用Read方法之后,信息被存 储起来,你可以通过读取该对象的Name、BaseURI、Depth、LineNumber等属性来获取这些信息。下面我给出一个完整的实例,该实例通 过简单的读取"books.xml"文件,然后将其中的信息显示在控制台中。

using System;
using System.Xml;

namespace ReadXml
{
    class Class1
    {
        static void Main( string[] args )
        {
            // 创建一个XmlTextReader类的对象并调用Read方法来读取文件
            XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
            textReader.Read();
            // 节点非空则执行循环体
            while ( textReader.Read() )
            {
                // 读取第一个元素
                textReader.MoveToElement();
                Console.WriteLine("XmlTextReader Properties Test");
                Console.WriteLine("===================");

                // 读取该元素的属性并显示在控制台中
                Console.WriteLine("Name:" + textReader.Name);
                Console.WriteLine("Base URI:" + textReader.BaseURI);
                Console.WriteLine("Local Name:" + textReader.LocalName);
                Console.WriteLine("Attribute Count:" + textReader.AttributeCount.ToString());
                Console.WriteLine("Depth:" + textReader.Depth.ToString());
                Console.WriteLine("Line Number:" + textReader.LineNumber.ToString());
                Console.WriteLine("Node Type:" + textReader.NodeType.ToString());
                Console.WriteLine("Attribute Count:" + textReader.Value.ToString());
            }
        }
    }
}


XmlTextReader类中有一个很重要的属性-NodeType,通过该属性,我们可以知道其节点的节点类型。而枚举类型XmlNodeType中 包含了诸如Attribute、CDATA、Element、Comment、 Document、DocumentType、Entity、ProcessInstruction以及WhiteSpace等的XML项的类型。通过与 XmlNodeType中的元素的比较,我们可以获取相应节点的节点类型并对其完成相关的操作。下面我就给出一个实例,该实例读取每个节点的 NodeType,并根据其节点类型显示其中的内容,同时程序还记录了XML文件中每种节点类型的数目。

using System;
using System.Xml;

namespace ReadXML
{
    class Class2
    {
        static void Main( string[] args )
        {
            int ws = 0;
            int pi = 0;
            int dc = 0;
            int cc = 0;
            int ac = 0;
            int et = 0;
            int el = 0;
            int xd = 0;

            XmlTextReader textReader = new XmlTextReader("C:\\books.xml");

            while (textReader.Read())
            {
                XmlNodeType nType = textReader.NodeType;

                // 节点类型为XmlDeclaration
                if (nType == XmlNodeType.XmlDeclaration)
                {
                    Console.WriteLine("Declaration:" + textReader.Name.ToString());
                    xd = xd + 1;
                }          

                // 节点类型为Comment
                if( nType == XmlNodeType.Comment)
                {
                    Console.WriteLine("Comment:" + textReader.Name.ToString());
                    cc = cc + 1;
                }          

                // 节点类型为Attribute
                if( nType == XmlNodeType.Attribute)
                {
                    Console.WriteLine("Attribute:" + textReader.Name.ToString());
                    ac = ac + 1;
                }

                // 节点类型为Element
                if ( nType == XmlNodeType.Element)
                {
                    Console.WriteLine("Element:" + textReader.Name.ToString());
                    el = el + 1;
                }

                // 节点类型为Entity
                if ( nType == XmlNodeType.Entity )
                {
                    Console.WriteLine("Entity:" + textReader.Name.ToString());
                    et = et + 1;
                }          

                // 节点类型为Process Instruction
                if( nType == XmlNodeType.ProcessingInstruction )
                {
                    Console.WriteLine("Process Instruction:" + textReader.Name.ToString());
                    pi = pi + 1;
                }      

                // 节点类型为DocumentType
                if( nType == XmlNodeType.DocumentType)
                {
                    Console.WriteLine("DocumentType:" + textReader.Name.ToString());
                    dc = dc + 1;
                }

                // 节点类型为Whitespace
                if ( nType == XmlNodeType.Whitespace )
                {
                    Console.WriteLine("WhiteSpace:" + textReader.Name.ToString());
                    ws = ws + 1;
                }
            }

            // 在控制台中显示每种类型的数目
            Console.WriteLine("Total Comments:" + cc.ToString());
            Console.WriteLine("Total Attributes:" + ac.ToString());
            Console.WriteLine("Total Elements:" + el.ToString());
            Console.WriteLine("Total Entity:" + et.ToString());
            Console.WriteLine("Total Process Instructions:" + pi.ToString());
            Console.WriteLine("Total Declaration:" + xd.ToString());
            Console.WriteLine("Total DocumentType:" + dc.ToString());
            Console.WriteLine("Total WhiteSpaces:" + ws.ToString());
        }
    }
}


以上,我向大家介绍了如何运用XmlTextReader类的对象来读取XML文档,并根据节点的NodeType属性来取得其节点类型信息。同时 XmlReader这个基类还有XmlNodeReader和 XmlValidatingReader等派生类,它们分别是用来读取XML文档的节点和模式的。限于篇幅,这里就不介绍了,读者可以参考有关资料。

四.写XML文档的方法:

XmlWriter类包含了写XML文档所需的方法和属性,它是XmlTextWriter类和 XmlNodeWriter类的基类。该类包含了WriteNode、WriteString、WriteAttributes、 WriteStartElement以及WriteEndElement等一系列写XML文档的方法,其中有些方法是成对出现的。比如你要写入一个元素, 你首先得调用WriteStartElement方法,接着写入实际内容,最后是调用WriteEndElement方法以表示结束。该类还包含了 WriteState、XmlLang和XmlSpace等属性,其中WriteState属性表明了写的状态。因为XmlWriter类包含了很多写 XML文档的方法,所以这里只是介绍最主要的几种。下面我们通过其子类XmlTextWriter类来说明如何写XML文档。

首先,我们要创建一个XmlTextWriter类的实例对象。该类的构造函数 XmlTextWriter有三种重载形式,其参数分别为一个字符串、一个流对象和一个TextWriter对象。这里我们运用字符串的参数形式,该字符 串就指明了所要创建的XML文件的位置,方法如下:

XmlTextWriter textWriter = New XmlTextWriter("C:\\myXmFile.xml", null);


在创建完对象后,我们调用WriterStartDocument方法开始写XML文档,在完成写工作后,就调用WriteEndDocument结束写 过程并调用Close方法将它关闭。在写的过程中,我们可以调用WriteComment方法来添加说明,通过调用WriteString方法来添加一个 字符串,通过调用WriteStartElement和WriteEndElement方法对来添加一个元素,通过调用 WriteStartAttribute和WriteEndAttribute方法对来添加一个属性。我们还可以通过调用 WriteNode方法来添加整一个节点,其它的写的方法还包括WriteProcessingInstruction和WriteDocType等等。 下面的实例就是介绍如何具体运用这些方法来完成XML文档的写工作的。

using System;
using System.Xml;

namespace WriteXML
{
class Class1
{
   static void Main( string[] args )
   {
    try
    {
     // 创建XmlTextWriter类的实例对象
     XmlTextWriter textWriter = new XmlTextWriter("C:\\w3sky.xml", null);
     textWriter.Formatting = Formatting.Indented;

     // 开始写过程,调用WriteStartDocument方法
     textWriter.WriteStartDocument();

     // 写入说明
     textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
     textWriter.WriteComment("w3sky.xml in root dir");  

     //创建一个节点
     textWriter.WriteStartElement("Administrator");
     textWriter.WriteElementString("Name", "formble");
     textWriter.WriteElementString("site", "w3sky.com");
     textWriter.WriteEndElement();
    


     // 写文档结束,调用WriteEndDocument方法
     textWriter.WriteEndDocument();

     // 关闭textWriter
     textWriter.Close();

    }
    catch(System.Exception e)
    {
     Console.WriteLine(e.ToString());
    }
   }
}
}


五.运用XmlDocument类:

XmlDocument类的对象代表了一个XML文档,它也是一个非常重要的XML类。该类包含了 Load、LoadXml以及Save等重要的方法。其中Load方法可以从一个字符串指定的XML文件或是一个流对象、一个TextReader对象、 一个XmlReader对象导入XML数据。LoadXml方法则完成从一个特定的XML文件导入XML数据的功能。它的Save方法则将XML数据保存 到一个XML文件中或是一个流对象、一个TextWriter对象、一个XmlWriter对象中。

下面的程序中我们用到了XmlDocument类对象的LoadXml方法,它从一个XML文档段中读取XML数据并调用其Save方法将数据保存在一个文件中。

// 创建一个XmlDocument类的对象
XmlDocument doc = new XmlDocument();
doc.LoadXml(("<Student type='regular' Section='B'><Name>Tommy Lex</Name></Student>"));

// 保存到文件中
doc.Save("C:\\student.xml");


这里,我们还可以通过改变Save方法中参数,将XML数据显示在控制台中,方法如下:

doc.Save(Console.Out);

至于文件的删除工作,则可采用与删除一般文件相同的方法:

System.IO.File.Delete( @"c:\abc.txt" );

或者:

Directory.Delete( "E:\SQLDB\MSSQL\Backup ",true); //删除目录及子文件

File.Create( "E:\SQLDB\MSSQL\Backup ")

补充:C#中如何删除文件名以任意字母开头的文件


而在下面的程序中,我们用到了一个XmlTextReader对象,通过它我们读取 "books.xml"文件中的XML数据。然后创建一个XmlDocument对象并载入XmlTextReader对象,这样XML数据就被读到 XmlDocument对象中了。最后,通过该对象的Save方法将XML数据显示在控制台中。

XmlDocument doc = new XmlDocument();
// 创建一个XmlTextReader对象,读取XML数据
XmlTextReader reader = new XmlTextReader("c:\\books.xml");
reader.Read();

// 载入XmlTextReader类的对象
doc.Load(reader);
// 将XML数据显示在控制台中
doc.Save(Console.Out);

六.总结:

XML技术作为.Net的基石,其重要性自然不言而喻。.Net框架包含了五个命名空间和大量的类来支 持与XML技术有关的操作。其中System.Xml是最重要的一个命名空间,其中的XmlReader类和XmlWriter类以及它们的派生类完成了 XML文档的读写操作,是最基本也是最重要的类。XmlDocument类代表了XML文档,它能完成与整个XML文档相关的各类操作,同时和其相关的 XmlDataDocument类也是非常重要的,值得读者的深入研究。

附录

"books.xml"文件如下:

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <first-name>Sidas</first-name>
      <last-name>Plato</last-name>
    </author>
    <price>9.99</price>
</book>
</bookstore>

posted @ 2009-12-29 12:59 FantasticGOD 阅读(685) 评论(0) 编辑
仅列出标题