当前位置:编程学习 > C#/ASP.NET >>

[分享]DataWindow.net做成自定义控件

DataWindow.net 是一个不错的东东,功能强大。
我把DataWindow.net做成自定义控件,希望大家看看,给点意见.
如有什么意见请发给我luzhihg@21cn.com
-----------------------------------------------
      //定义属性
        //public
        //[DefaultValue(""), Category("数据连接"), Description("数据表"), ReadOnlyAttribute(false), Editor(typeof(SelectFileNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
        //public string LibraryList { set { this.is_LibraryList = value; } get { return this.is_LibraryList; } }
        ////-------------
        //public class SelectFileNameEditor : System.Windows.Forms.Design.FileNameEditor
        //{
        //    protected override void InitializeDialog(OpenFileDialog ao_ofd)
        //    {
        //        ao_ofd.Filter = "PBL 文件 (*.pbl)|*.pbl|所有文件 (*.*)|*.*";
        //    }
        //}
        //[DefaultValue(""), Category("数据连接"), Description("数据连接模式"), ReadOnlyAttribute(false)]
        //public Sybase.DataWindow.DbmsType Dbms { set { this.idt_Dbms = value; } get { return this.idt_Dbms; } }
        //public Sybase.DataWindow.DbmsType idt_Dbms; 
        //以上为样版码

        [DefaultValue(""), Category("功能扩展"), Description("点表头排序"), ReadOnlyAttribute(false)]
        public Boolean SetSortRow { set { this.ib_SetSortRow = value; } get { return this.ib_SetSortRow; } }
        [DefaultValue(""), Category("功能扩展"), Description("单选显亮"), ReadOnlyAttribute(false)]
        public Boolean SingleSelectRow { set { this.ib_SingleSelectRow = value; } get { return this.ib_SingleSelectRow; } }
        [DefaultValue(""), Category("功能扩展"), Description("多选显亮"), ReadOnlyAttribute(false)]
        public Boolean MultiSelectRow { set { this.ib_MultiSelectRow = value; } get { return this.ib_MultiSelectRow; } }
        [DefaultValue(""), Category("功能扩展"), Description("保护旧数据"), ReadOnlyAttribute(false)]
        public Boolean ProtectOldData { set { this.ib_ProtectOldData = value; } get { return this.ib_ProtectOldData; } }
        [DefaultValue(""), Category("功能扩展"), Description("焦点背景颜色"), ReadOnlyAttribute(false)]
        public Boolean RowFocus { set { this.ib_RowFocus = value; } get { return this.ib_RowFocus; } }
        [DefaultValue(""), Category("功能扩展"), Description("FreeForm模式焦点背景颜色"), ReadOnlyAttribute(false)]
        public Boolean FreeFormRowFocus { set { this.ib_FreeFormRowFocus = value; } get { return this.ib_FreeFormRowFocus; } }
        [DefaultValue(""), Category("功能扩展"), Description("隔行背景颜色"), ReadOnlyAttribute(false)]
        public Boolean RowsColor { set { this.ib_RowsColor = value; } get { return this.ib_RowsColor; } }
        [DefaultValue(""), Category("功能扩展"), Description("Enter键代替TAB键"), ReadOnlyAttribute(false)]
        public Boolean EnterKey { set { this.ib_EnterKey = value; } get { return this.ib_EnterKey; } }
        [DefaultValue(""), Category("功能扩展"), Description("Enter键代替TAB键自动增加行"), ReadOnlyAttribute(false)]
        public Boolean EnterKeyAddRow { set { this.ib_EnterKeyAddRow = value; } get { return this.ib_EnterKeyAddRow; } }
        [DefaultValue(""), Category("功能扩展"), Description("使用方向键代替Tab,Shift+Tab键(不建议使用)"), ReadOnlyAttribute(false)]
        public Boolean DirectionKey { set { this.ib_DirectionKey = value; } get { return this.ib_DirectionKey; } }
                                 

        [DefaultValue(""), Category("功能扩展参数"), Description("焦点背景颜色"), ReadOnlyAttribute(false)]
        public int RowFocusColor { set { this.ii_RowFocusColor = value; } get { return this.ii_RowFocusColor; } }
        [DefaultValue(""), Category("功能扩展参数"), Description("FreeForm模式焦点背景颜色"), ReadOnlyAttribute(false)]
        public int FreeFormRowFocusColor { set { this.ii_FreeFormRowFocusColor = value; } get { return this.ii_FreeFormRowFocusColor; } }
        [DefaultValue(""), Category("功能扩展参数"), Description("隔(奇)行背景颜色"), ReadOnlyAttribute(false)]
        public int OneColor { set { this.ii_OneColor = value; } get { return this.ii_OneColor; } }
        [DefaultValue(""), Category("功能扩展参数"), Description("隔(偶)行背景颜色"), ReadOnlyAttribute(false)]
        public int TwoColor { set { this.ii_TwoColor = value; } get { return this.ii_TwoColor; } }
        [DefaultValue(""), Category("功能扩展参数"), Description("Enter键代替TAB键在当前字段后增加行"), ReadOnlyAttribute(false)]
        public string EnterKeyColumnName { set { this.is_EnterKeyColumnName = value; } get { return this.is_EnterKeyColumnName; } }
        [DefaultValue(""), Category("功能扩展参数"), Description("Enter键代替TAB键自动增加行后跳到当前字段"), ReadOnlyAttribute(false)]
        public string EnterKeySetColumn { set { this.is_EnterKeySetColumn = value; } get { return this.is_EnterKeySetColumn; } }

        //定义字段
        //private 与属性关联
        private Boolean ib_SetSortRow = true, ib_SingleSelectRow = false, ib_MultiSelectRow = false;
        private Boolean ib_ProtectOldData = false;
        private Boolean ib_RowFocus = false;
        private int ii_RowFocusColor = 15597567;
        private Boolean ib_FreeFormRowFocus = false;
        private int ii_FreeFormRowFocusColor = 15597567;
        private Boolean ib_RowsColor = false;
        private int ii_OneColor = 16777215, ii_TwoColor = 14737632;
        private Boolean ib_EnterKey = false,ib_EnterKeyAddRow = false;
        private string is_EnterKeyColumnName = "",is_EnterKeySetColumn = "";
        private Boolean ib_DirectionKey = false;

        //private
        private string is_SortType = "A", is_OrderCol = "";
        private int ii_Row = 0, ii_SRow = 0, ii_ERow = 0, ii_Flag = 0;
        private ArrayList ial_ArrayName = new ArrayList();
        private ArrayList ial_ArrayMode = new ArrayList();
        private ArrayList ial_ArrayColor = new ArrayList();
        private string is_OldColumnName="";

        //Xml文件
        private HFCBase.Profile.Xml lx_Xml = new HFCBase.Profile.Xml();

        //定义事件
        [Category("功能扩展事件"), Description("在Enter键增加行之前发生"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
        public event EnterKeyAddBeforeHandle EnterKeyAddBefore;
        public delegate void EnterKeyAddBeforeHandle(); //委托

        [Category("功能扩展事件"), Description("在增加行之后发生"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
        public event DWInsertRowAfterHandle DWInsertRowAfter;
        public delegate void DWInsertRowAfterHandle(object sender, DWInsertRowAfterEventArgs e);
        public class DWInsertRowAfterEventArgs : EventArgs
        {
            private int li_InsertRow = 0,li_CurrentRow=0;
            public DWInsertRowAfterEventArgs(int ai_InsertRow, int ai_CurrentRow)
            {
                this.li_InsertRow = ai_InsertRow;
                this.li_CurrentRow = ai_CurrentRow;
            }
            public int InsertRow
            {
                get { return li_InsertRow; }
            }
            public int CurrentRow
            {
                get { return li_CurrentRow; }
            }
        }

        //
--------------------编程问答-------------------- //---------------
        //实现方法

        private void DWSetSort() //数据窗口排序
        {
            try
            {
                if (this.ib_SetSortRow == true)
                {
                    string ls_CurObj = "", ls_CurCol = "";
                    int li_LinePos = 0;
                    int ll_CurRowNumber = 0;
                    ls_CurObj = this.ObjectUnderMouse.Gob.Name; //得出objectName
                    ll_CurRowNumber = this.ObjectUnderMouse.RowNumber; //得出当前Row
                    if (ls_CurObj != null && ls_CurObj != "DataWindow") //防止点错
                    {
                        if (this.Describe(ls_CurObj + ".Band") == "header")
                        {
                            li_LinePos = Convert.ToInt32(this.Describe(ls_CurObj + ".X")) + (Convert.ToInt32(this.Describe(ls_CurObj + ".Width")) - 20);

                            is_OrderCol = ls_CurObj.Substring(0, ls_CurObj.Length - 2);

                            if (is_SortType == "A")
                            {
                                li_LinePos -= 20;
                                DataWindowSort(this, li_LinePos, is_OrderCol, is_SortType);
                                is_SortType = "D";
                            }
                            else
                            {
                                DataWindowSort(this, li_LinePos, is_OrderCol, is_SortType);
                                is_SortType = "A";
                            }
                        }
                    }

                }
            }
            catch
            {
            //
            }

            finally
            {

            }
        }

        private Boolean DataWindowSort(Sybase.DataWindow.DataWindowControl ad_DW, int ai_LinePos, string as_Colmun, string as_SortType) //排序的方法
        {
            try
            {
                //排序  
                ad_DW.SetSort(as_Colmun + " " + as_SortType);
                ad_DW.Sort();

                //销毁箭头图形
                //ad_DW.Modify("destroy l_arrowLine_1");
                //ad_DW.Modify("destroy l_arrowLine_2");
                //ad_DW.Modify("destroy l_arrowLine_3");

                //创建升序的箭头图形
                string ls_AddLin;
                switch (as_SortType)
                {
                    case "A":
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos) + "' y1='24' x2='" + Convert.ToString(ai_LinePos - 50) + "' y2='24' name=l_arrowLine_1 pen.color='" + Color.FromArgb(0, 0, 0) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos + 5) + "' y1='24' x2='" + Convert.ToString(ai_LinePos - 27) + "' y2='52' name=l_arrowLine_3 pen.color='" + Color.FromArgb(255, 255, 255) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos - 50) + "' y1='24' x2='" + Convert.ToString(ai_LinePos - 23) + "' y2='48' name=l_arrowLine_2 pen.color='" + Color.FromArgb(0, 0, 0) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        break;
                    case "D":
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos) + "' y1='24' x2='" + Convert.ToString(ai_LinePos - 32) + "' y2='52' name=l_arrowLine_1 pen.color='" + Color.FromArgb(0, 0, 0) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos + 5) + "' y1='24' x2='" + Convert.ToString(ai_LinePos - 32) + "' y2='52' name=l_arrowLine_3 pen.color='" + Color.FromArgb(255, 255, 255) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        //ls_AddLin = "create line(band=Foreground x1='" + Convert.ToString(ai_LinePos - 50) + "' y1='48' x2='" + Convert.ToString(ai_LinePos - 27) + "' y2='48' name=l_arrowLine_2 pen.color='" + Color.FromArgb(255, 255, 255) + "')";
                        //ad_DW.Modify(ls_AddLin);
                        break;
                }
                return true;
            }
            catch
            {
                return false;
            }

            finally
            {

            }
        }
        //-----------------------------------------
        //多行选取
        private void DWMultiSelectRow(Sybase.DataWindow.DataWindowControl ad_DW, ref int ai_Row, ref int ai_SRow, ref int ai_ERow, ref int ai_Flag)
        {
            
            try
            {
                int li_Index = 0;
                if ((Control.ModifierKeys & Keys.Shift) != 0) //Shift 键
                {
                    if (ai_Flag < 1)
                    {
                        ai_Flag = 1;
                        ai_SRow = ai_Row;
                        ad_DW.SelectRow(ai_Row, true);
                    }
                    else
                    {
                        ai_Flag = 2;
                        ai_ERow = ai_Row;
                        ad_DW.SelectRow(0, false);
                        if (ai_SRow > ai_ERow)
                        {
                            for (li_Index = ai_ERow; li_Index <= ai_SRow; li_Index++)
                            {
                                ad_DW.SelectRow(li_Index, true);
                            }
                        }
                        else
                        {
                            for (li_Index = ai_SRow; li_Index <= ai_ERow; li_Index++)
                            {
                                ad_DW.SelectRow(li_Index, true);
                            }
                        }
                    }

                }
                //(Control.ModifierKeys & Keys.Alt) != 0 //ALT键的
                else if ((Control.ModifierKeys & Keys.Control) != 0)
                {
                    if (ad_DW.IsSelected(ai_Row))
                    {
                        ad_DW.SelectRow(ai_Row, false);
                    }
                    else
                    {
                        ad_DW.SelectRow(ai_Row, true);
                    }


                }
                else
                {
                    ai_Flag = 1;
                    ai_SRow = ai_Row;
                    ad_DW.SelectRow(0, false);
                    ad_DW.SelectRow(ai_Row, true);
                }


            }
            catch
            {
            }

        } --------------------编程问答-------------------- //回车键使用
        //重写 ProcessCmdKey
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            try
            {
                
                //回车键代替TAB键
                if (ib_EnterKey == true)
                {
                    int li_InsertRow = 0;
                    if (is_EnterKeyColumnName.Trim() == "")
                    {
                        if (Convert.ToInt16(this.Describe("DataWindow.Column.Count")) == this.GetColumnNumber())
                        {
                            if (ib_EnterKeyAddRow == true && this.CurrentRow == this.RowCount)
                            {
                                this.DWInsertRow(0);
                                if (is_EnterKeySetColumn != "")
                                {
                                    this.SetColumn(is_EnterKeySetColumn);
                                }
                                this.Modify("DataWindow.HorizontalScrollPosition='1'");
                                return false;
                            }
                        }
                    }
                    else
                    {
                        if (this.GetColumnName() == is_EnterKeyColumnName)
                        {
                            if (ib_EnterKeyAddRow == true && this.CurrentRow == this.RowCount)
                            {
                                this.DWInsertRow(0);
                                if (is_EnterKeySetColumn != "")
                                {
                                    this.SetColumn(is_EnterKeySetColumn);
                                }
                                this.Modify("DataWindow.HorizontalScrollPosition='1'");
                                return false;
                            }
                        }
                    }
                }
                    // 发送sendKey
                switch (keyData)
                {
                    case Keys.Enter:
                        if (ib_EnterKey == true)
                        {
                            EnterKeyAddBefore();
                            System.Windows.Forms.SendKeys.Send("{tab}");
                            return true;
                        }
                        break;
                    case Keys.Right:
                        if (ib_DirectionKey == true)
                        {
                            System.Windows.Forms.SendKeys.Send("{tab}");
                            return true;
                        }
                        break;
                    case Keys.Left:
                        if (ib_DirectionKey == true)
                        {
                            System.Windows.Forms.SendKeys.Send( "+{" + Keys.Tab.ToString() + "}"); //Shift + Tab /Ctrl + Tab ^{tab}
                            return true;   
                        }
                        break;
                }
                    return base.ProcessCmdKey(ref msg, keyData);
                    
                    //   
                
            }
            catch
            {
                return false;
            }
        }

//-----------------------------------------------------------------------
//公开的方法

        //多行删除
       public virtual void MulitdwDelRow(Sybase.DataWindow.DataWindowControl ad_DW)
        {
            try
            {
                int li_i, li_RowCount, li_OldRowCount;
                li_RowCount = ad_DW.RowCount;
                li_OldRowCount = li_RowCount;
                for (li_i = 1; li_i <= li_RowCount; li_i++)
                {
                    if (ad_DW.IsSelected(li_i) == true)
                    {
                        ad_DW.DeleteRow(li_i);
                        li_i--;
                        li_RowCount--;
                    }
                }
                if (li_RowCount == li_OldRowCount && ib_RowFocus == true)
                {
                    ad_DW.DeleteRow(ad_DW.CurrentRow);
                }

            }
            catch
            {
            }

        }

        //数据窗口是否更改
        public virtual int DataWindowTest(Sybase.DataWindow.DataWindowControl []ad_DW)
        {
            try
            {
                int li_Return = 0, li_i = 1, li_DWCcount = 0;
                li_DWCcount = ad_DW.Length;
                for (li_i = 1; li_i <= li_DWCcount; li_i++)
                {
                    ad_DW[li_i - 1].AcceptText();
                    li_Return += ad_DW[li_i - 1].ModifiedCount;
                    li_Return += ad_DW[li_i - 1].DeletedCount;
                }

                return li_Return;
            }
            catch
            {
                return 0;
            }
        }

        //数据窗口更新
        public virtual int DataWindowUpdate(Sybase.DataWindow.DataWindowControl[] ad_DW, Sybase.DataWindow.Transaction at_Trans, int ai_select)
        {
            try
            {
                int li_Return = 0, li_i = 1, li_DWCount = 0;
                li_DWCount = ad_DW.Length;
                for (li_i = 1; li_i <= li_DWCount; li_i++)
                {
                    ad_DW[li_i - 1].AcceptText();
                    ad_DW[li_i - 1].UpdateData();
                }
                at_Trans.Commit();
         
                if (ai_select == 1)
                {
                    MessageBox.Show("更新成功!");
                }
                return 1;

            }
            catch (Sybase.DataWindow.DbErrorException ex)
            {
                MessageBox.Show("更新不成功!原因:" + ex.SqlErrorText);
                at_Trans.Rollback();
                return 0;
            }
            catch (Sybase.DataWindow.DataWindowNotCreatedException ex)
            {
                at_Trans.Rollback();
                MessageBox.Show("数据窗口还没有创建!");
                return 0;
            }
            catch (Sybase.DataWindow.MethodFailureException ex)
            {
                at_Trans.Rollback();
                MessageBox.Show("更新不成功!原因:" + ex.Message.ToString());
                return 0;
            }
            catch
            {
                at_Trans.Rollback();
                MessageBox.Show("更新不成功!");
                return 0;
            }
        } --------------------编程问答-------------------- //退出时的检查
        public virtual int DataWindowCloseQuery(Sybase.DataWindow.DataWindowControl []ad_DW,Sybase.DataWindow.Transaction atc_Trans)
        {
            try
            {
                if (this.DataWindowTest(ad_DW) != 0)
                {
                    DialogResult ldr_dialog;
                    ldr_dialog = MessageBox.Show("数据尚未保存,是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                    switch (ldr_dialog)
                    {
                        case DialogResult.OK:
                            if (this.DataWindowUpdate(ad_DW, atc_Trans, 1) == 1)
                            {
                                return 1;
                            }
                            else
                            {
                                return 0;
                            }
                            break;
                        case DialogResult.No:
                            return 1;
                            break;
                        case DialogResult.Cancel:
                            return 0;
                            break;
                        default:
                            return 1;
                    }
                    return 1;
                }
                else
                {
                    return 1;
                }

            }
            catch
            {
                return 1;
            }
        }

        //增加行
        public int DWInsertRow(int ai_CurrentRow)
        {
            try
            {
                int li_InsertRow = 0;
                li_InsertRow = this.InsertRow(ai_CurrentRow);
                this.DWInsertRowAfter(this, new DWInsertRowAfterEventArgs(li_InsertRow,this.CurrentRow)); //触发事件及参数
                this.ScrollToRow(li_InsertRow);
                this.Focus();
                this.SetColumn(1);
                return li_InsertRow;
            }
            catch
            {
                return 0;
            }
        } --------------------编程问答-------------------- 先收了,终于有高手现身了,谢 --------------------编程问答-------------------- 是不是从pb里搞过来的?先收藏学习! --------------------编程问答-------------------- 高手终于现身了. --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 强顶!!! --------------------编程问答-------------------- 再顶!!! --------------------编程问答-------------------- UP --------------------编程问答-------------------- 云里雾里的 

贴这些代码 有看明白的吗?


还不如弄几个截图 来点说明清楚呢 --------------------编程问答-------------------- 收藏再审阅。

datawindow
是个好东西,用在c#中感觉是如何呢? 我还没有用过,但很想... --------------------编程问答-------------------- 高手,datawindow.net的资料真得太少了 --------------------编程问答-------------------- 楼主的QQ是多少?  --------------------编程问答-------------------- 江苏天益网络信息有限公司一家以“密码技术和网络技术”为基础,专业从事网络安全通讯、应用系统安全产品开发和服务的高科技企业。注册资本2000万元,是无锡市唯一具有国家商用密码产品定点生产单位许可证的公司。 公司的“信息安全平台”项目是2009年无锡市唯一入围国家发改委信息安全专项的项目。公司目前与中国电信、中国联通、中国移动等运营商大面积展开合作,在社保行业、汽车行业、电梯行业业绩斐然。因公司快速发展的需要,特邀有志之士加盟江苏天益,公司提供极具竞争力的薪资福利待遇,如果你有以下品质:诚实、守信、勤奋和易做图! 那么,来吧!加入到“天益人”的队伍,本公司的人才策略是:心有多大,你的舞台就有多大,天益给每位“天益人”提供一个没有天花板的上升空间。  
    
一、LINUX C 研发工程师   1名
任职要求:
1、本科及以上学历,计算机及相关专业                         
2、2年以上Unix/Linux平台C开发和调试经验,1年以上C语言开发经验,有嵌入式系统或实时系统开发经验,具备半年以上Linux内核等底层开发经验;
3、熟悉SNMP、TCP/IP协议,对网络技术、密码技术有一定的理论基础;
4、具有规范化、标准化的代码编写习惯和良好的技术文档习惯;
5、良好的英语读写能力;
6、良好的逻辑思维能力;良好的团队协作精神及工作责任心。

薪资:税后3500--6500元/月,公司提供住宿,缴纳5险1金,工作地点:无锡。
联系方式:0510-83590088-817  QQ:2266312 (注明应聘)   邮件:jiandandan2008@sina.com


二、 嵌入式软件工程师   1名
任职条件:
1、本科及以上学历,通讯、电子、计算机及相关专业,
2、本科两年,硕士一年以上相关工作经验优先;
3、熟悉arm架构,熟练运用C语言,熟悉uart、i2c、spi、parallel 、timer、can等外围模块原理,具有一定的驱动开发能力;了解linux操作系统的内核开发和驱动开发; 
4、具有很强的责任心和敬业精神,具有独立工作能力;

薪资:税后3500--6500元/月,公司提供住宿,缴纳5险1金,工作地点:无锡。
联系方式:0510-83590088-817  QQ:2266312 (注明应聘)   邮件:jiandandan2008@sina.com

三、C/C++开发工程师    2名
任职要求:
1、 精通VC++/C++编程语言,熟练掌握 MFC/SDK 和 API 、STL 、COM 等;
2、 精通MS Access、SQL SERVER和Mysql等数据库的C++程序开发,有大型项目开发经验;开发过硬件驱动、文件过滤驱动、虚拟打印驱动、usb设备驱动程序或者协议分析程序;使用tcp/ip协议开发过程序,对网络底层协议精通;
3、 精通C++相关的XML、COM+组件技术、WebService技术;具有规范化、标准化的代码编写习惯和良好的技术文档习惯;
4、 良好的英语读写能力;良好的逻辑思维能力;良好的团队协作精神及工作责任心

薪资:税后3500--6500元/月,公司提供住宿,缴纳5险1金,工作地点:无锡。
联系方式:0510-83590088-817  QQ:2266312 (注明应聘)   邮件:jiandandan2008@sina.com

四、C#开发工程师    2名
任职要求:
1、 精通asp.net开发原理,熟悉面向对象的分析设计技术(OOAD)、设计模式和OOAD设计原则;
2、 具有.NET企业框架下多层结构及分布式系统开发经验;
3、 熟悉DHTML、Javascript/AJAX、CSS、HTML/XML等相关WEB技术;
4、 具有良好的沟通能力和团队合作精神、对工作任务和工作进度的完成有责任感;

薪资:税后2500--4500元/月,公司提供住宿,缴纳5险1金,工作地点:无锡。
联系方式:0510-83590088-817  QQ:2266312 (注明应聘)   邮件:jiandandan2008@sina.com


五、售前技术支持工程师   3名
任职要求:
1、 熟悉计算机网络技术,对计算机网络有一定的了解;
2、 有较强的文字功底,能够独立撰写技术方案书,有大型项目投标和讲标经验;
3、 较强的售前思路和意识,及时准确地把握客户需求,善于引导客户,有较强的客户服务意识和沟通技巧; 
4、 具备良好的沟通和协调能力,擅于跨部门之间的合作,能够适应出差和加班;能承受工作压力、亲和力强。

薪资:税后2500--4500元/月,公司提供住宿,缴纳5险1金,工作地点:无锡。
联系方式:0510-83590088-817  QQ:2266312 (注明应聘)   邮件:jiandandan2008@sina.com


有合适的人选帮我介绍下,谢谢!公司也接受有潜力的应届毕业生!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,