[分享]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#