DataWindow.net应用介绍(一)

news/2024/7/4 9:45:34

       Datawindow中文译名为数据窗口,是开发工具PowerBuilder(PB)的一个王牌组件,使用PB作为开发工具的,基本上都是冲着Datawindow 来的,它不仅可以用来显示数据,还可以实现数据录入、报表打印等功能,是Sybase 的专利技术,功能非常强大。Sybase从PB10.0开始,为了使PB开发的应用可以支持.Net,就开发出来了DataWindow.net组件,可以在.net的开发环境中使用,包括DataWindow控件 和Datastore对象,功能与PB中的数据窗口控件一样。其中PB10.5的数据窗口对应DW.NET 2.0,PB11对应的是DW.NET 2.5,如果是使用PB11.5,则只能使用PB11.5里面提供的DW.NET程序集,目前Sybase还没有单独提供DW.NET的新版本,以支持PB11.5和PB12。而且PB12.Net,已经提供采用WPF技术实现的DW.NET了。
      在.Net中大家经常使用的DataTable,其里面很多思想是来源于DataWindow,如缓冲区,行列状态的概念,以及根据DataTable的更新状态,生成不同的SQL来更新数据库,还有GetChanges方法来获取DataTable的更新情况等等。
      为了使用DW.NET,需要先下载安装这个控件,通过以下地址 http://www.sybase.com/detail?id=1053922 可以下载到DW.NET 2.5的试用版,下载后安装即可。 注意:DW.NET 2.5支持在VS2005中集成了一个编辑DW的插件程序,如果是VS2008,则只能用DataWindow Designer这个编辑工具。如果机器没有安装VS2005,在安装的过程中,有提示DWPainter.dll文件不能注册的错误,是正常的,因为这个VS插件只支持VS2005。由于本人的计算机只安装了VS2008,没有VS2005,所以下面只能按照VS2008的开发环境进行讲解。
      安装完成后,为了在.Net中使用数据窗口,我们需要先定义一个数据窗口对象。下面将使用SQL Server2000的NorthWind数据库作为数据窗口的数据源,来定义数据窗口对象,并在程序中使用它.
    1. 首先,我们需要先启动  程序--Sybase--DataWindow Designer 2.5,启动程序后,首先需要通过 File --New--Project来增加一个Project 。

 

 
    2.  然后需要先连接数据库,以这个数据库作为数据窗口的数据源。选择 Tools---Database Profiles ,在弹出的对话框中选择Ole Microsoft OLE DB,然后单击 New,增加数据源定义。 保存设置之后,选择这个设置,然后单击Connect,如果成功,则可以正常使用SQL Server的Northwind数据库作为数据窗口的数据源了。

 

 

     

 

       3.增加一个数据窗口,File ---New --DataWindow,数据窗口支持很多种展现格式,现在选择Grid这个格式,然后Next,出现数据源类源对话窗口,选择SQL Select,通过写SQL 语句的方式来定义数据源,点Next,出现选择数据表对话窗口,可以直接在上面选择需要的表名称,然后点Open,再选择需要的数据列等。

 

 
      现在我们点击Customers这个表,然后点击Open,这时会显示Customers这个数据表可以选择的数据列,右键单击Customers标题,在弹出的菜单中选择Select All,选择全部数据列.

 

 

      点击工具栏的Return按钮--Next--Finish,这样就完成了数据窗口的数据源定义。完成数据窗口的缺省格式如下:

      

  点击保存,输入名称为 d_Customers,这样就完成了一个数据窗口的定义。当然,数据窗口的功能非常强大,在以后的功能介绍中,将会继续介绍数据窗口的各种功能。具体的操作,请查看帮助文档或找本PB的教程。

      4.启动VS2008,新建一个WinForm的应用程序。
      5.在Form1中增加一个DataWindowControl1的数据窗口控件,调整位置,并设置属性LibraryList为d:\dwTest.pbl,DataWindowObject为 d_Customers.  ScrollBars为Both。然后增加几个按钮,分别为增加、删除、保存、退出。

 

 

      Form1.cs的代码如下

ContractedBlock.gif ExpandedBlockStart.gif Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Sybase.DataWindow;
using System.Data.SqlClient;

namespace DWTest
{
    
public partial class Form1 : Form
    {
        SqlConnection dbConn;
        AdoTransaction adoTrans;

        
public Form1()
        {
            InitializeComponent();
        }

        
private void Form1_Load(object sender, EventArgs e)
        {
           
            
//连接数据库,并检索数据
           dbConn =new SqlConnection("Server=(local); DataBase=NorthWind;uid=sa;pwd=sa");
           dbConn.Open();
           adoTrans 
= new AdoTransaction(dbConn);
           adoTrans.BindConnection();
           dataWindowControl1.SetTransaction(adoTrans);
           dataWindowControl1.Retrieve();
        }

        
private void btnAdd_Click(object sender, EventArgs e)
        {
            
//增加行,并移动记录到新增加的行
            int li_Row;
            li_Row
=dataWindowControl1.InsertRow(0);
            dataWindowControl1.ScrollToRow(li_Row);
            dataWindowControl1.SetRow(li_Row);
            dataWindowControl1.SetColumn(
1);
            dataWindowControl1.Focus();
        }
        
protected override void OnClosed(EventArgs e)
        {
            adoTrans.UnbindConnection();
            dbConn.Close();
            
base.OnClosed(e);
        }

        
private void btnDel_Click(object sender, EventArgs e)
        {
            
int li_Row = dataWindowControl1.CurrentRow;
            
if ( li_Row<= 0)
                
return;

            
//如果是新增加的行,而且还没输入任何数据,则不提示
            if (dataWindowControl1.GetRowStatus(li_Row, DataBuffer.Primary) != RowStatus.New)
            {
                
if (MessageBox.Show("你真的要删除当前记录吗?""提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                    dataWindowControl1.Focus();
                    
return;
                }
            }

            
//删除记录,注意,只是把记录移入删除缓冲区,并未真正从数据库中删除
            dataWindowControl1.DeleteRow(li_Row);
            dataWindowControl1.Focus();
        }

        
private void btnSave_Click(object sender, EventArgs e)
        {
            dataWindowControl1.AcceptText();
            
if((dataWindowControl1.ModifiedCount+dataWindowControl1.DeletedCount)==0)
            {
                 MessageBox.Show(
"没有数据需要保存!");
                dataWindowControl1.Focus();
                
return;
            }

            
//使用事务来进行数据保存
            adoTrans.Transaction = dbConn.BeginTransaction();
            
try
            {
                dataWindowControl1.UpdateData();
                adoTrans.Transaction.Commit();
                MessageBox.Show(
"数据保存成功!");
            }
            
catch(Exception ex)
            {
                adoTrans.Transaction.Rollback();
                MessageBox.Show(
"数据保存失败!\r\n\r\n详细错误信息:\r\n"+ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }


        
private void btnExit_Click(object sender, EventArgs e)
        {
            
this.Close();
        }

       
    }
}

 

 最后窗口的运行效果如下,单击增加、删除按钮可以对数据窗口进行增加删除操作,修后数据后点击保存将更新到数据库。          第一次写Blog,写得比较乱,希望大家给点意见。

      

 

转载于:https://www.cnblogs.com/huanggc/archive/2009/07/15/1523743.html


http://www.niftyadmin.cn/n/2970594.html

相关文章

微软的落寞始于创新的停滞

微软的CEO鲍尔默上台&#xff0c;这一后盖茨时代的开始&#xff0c;就注定了微软在创新上的停滞。 出生&#xff1a;1956年3月24日 史蒂夫鲍尔默 职位&#xff1a;微软公司首席执行官兼总裁教育背景&#xff1a;理学士&#xff0c;于哈佛大学&#xff1b;工商行政管理硕士&…

JDK NEW TOOLS (监视JVM)

http://www.diybl.com/course/3_program/java/javajs/2008318/104919.html 最近压力测试和调优Liferay portal&#xff0c;所以需要找到一种工具&#xff0c;可以比较好的监测VM工具。本来想使用商用工具&#xff0c;但偶然间发现SUN 的JDK中新添了几个工具&#xff0c;并且非常…

apache+svn权限管理实例

http://abc.scmlife.com/viewthread.php?tid17700&highlight apachesvn权限管理实例 看了很多同学对权限管理的困惑&#xff0c;自己将实际操作方案放上来&#xff0c;供大家参考&#xff1a; 首先介绍下我们的环境&#xff1a;我们的SVN服务器是LINUX的操作系统方法一 例…

C# 基础知识

一、 C# 复制代码 // compile with: /target:library public class D {public virtual void DoWork(int i){// Original implementation.} }public abstract class E : D {public abstract override void DoWork(int i); }public class F : E {public override void DoWork(int…

巧解jquery及其插件一些bug

在开发傲游新浪微博插件中&#xff0c;使用jquery遇到一些问题&#xff0c;原因和解决方法如下。 1、thickbox的参数问题 在thickbox的例子中&#xff0c;以inline方式调用&#xff0c;形式如#TB_inline?height300&width300&inlineIdmyOnPageContent。 但是发现这样调…

【转载】项目级别配置管理员的职责

http://abc.scmlife.com/viewthread.php?tid17178&highlight

软考成绩出来了

软考成绩出来了.上午:49下午:64这个成绩应该是过了.我手上还有个网工呢,过去的时光对我来讲确实有点辛苦,但是以后应该更加努力才是.有一点点奖励,我都会很开心^_^转载于:https://www.cnblogs.com/splyn/archive/2009/08/04/1538783.html

easyui datagrid url不请求请求_浅谈url

url的组成部分主要有&#xff1a;协议&#xff0c;域名&#xff0c;路径&#xff0c;查询参数&#xff0c;锚点协议http协议和https协议http协议默认端口好80https协议默认端口号443域名每个域名都对应一个ip&#xff08;internet protocol网络协议&#xff09;每个上网的设备都…