datawindow.net 学习

Datawindow.Net version 2.0使用概要
1. 安装
先安装.net2005 ,框架版本2.0,然后安装DataWindow.Net 2.0组件及设计编译环境。
安装后在.net2005窗体设计时会出现Sybase DataWindow控件页签。

2. 使用
DataWindow控件可以直接在C#窗体中使用。

3. 设计DataWindow
在PB或DataWindow Designer设计环境中设计数据窗,并存到.pbl中,供程序调用。
发布后可以编译成.pbd文件格式(还未测试)。

4. C#中调用DataWindow
a) 窗体上创建一个Datawindow控件 起名为dw。
b)
Sybase.DataWindow.Transaction Trans = new Sybase.DataWindow.Transaction();
Trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;//数据库连接方式
Trans.Password = "123";
Trans.UserID = "sa";
Trans.AutoCommit = false;
Trans.Lock = "RC";
Trans.DbParameter = “PROVIDER=''SQLOLEDB'',DATASOURCE=''xiancai'',
PROVIDERSTRING=''database=demo''”;//数据库连接串
Trans.Connect();//连接数据库
d) 显示数据窗
dw.LibraryList = “test.pbl”;//发布后使用.pbd文件
dw.DataWindowObject = "datawindowName";//数据窗名称
dw.SetTransaction(Trans );
dw.Retrieve();//显示数据窗
e) 关闭连接
Trans.Disconnect();
 ============or================================or===================
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
Sybase.DataWindow.AdoTransaction adTrans;
conn.ConnectionString = "Server=localhost;Initial Catalog=Northwind;User ID=sa;Password=sa;"//Provider=SQLOLEDB;
conn.Open();
adTrans = new Sybase.DataWindow.AdoTransaction(conn);
dw_1.LibraryList = "test.pbl";
dw_1.DataWindowObject = "datawindowName";
adTrans.BindConnection();
dw_1.SetTransaction(adTrans);
dw_1.Retrieve();
conn.Close();
5. c#中利用DataWindow控件操作数据
a) 添加
int row = this.dw.InsertRow(0);//插入一条记录
dw.SetRow(row);
dw.SetItemString(row,"ID",”100”);//给字段赋值
dw.SetItemString(row,"名称","name"); //给字段赋值
b) 删除
this.dw.DeleteRow( 1 );//删除第一行记录
c) 保存
this.dw.UpdateData( true, true );
Trans.Commit();//数据提交后才写入数据库中

经过上面系列一,二的讲解,相信朋友们,对Datawindow.net有了初步的认识,本系列三,从datawindow.net的配套的一个datawindow Designer入手,讲解。
我们使用datawindow.net的初终,就是基于其强大的datawindow处理,所以datawindow designer的使用,是必须的!前面使用的pbl文件,就是有其设计的。如果你使用过pb,特别是pb9.0,那么对你来说,是非常轻松的,可以说完全相同。
设计中的小插曲:

--------------------------------------------------------------------------------

1.在PB的数据窗口中,当使用了分组的情况下,没有直接的方法可以直接显示出当前行所在组的组的行数。在测试中发现了下面的方法可以显示当前的组的行数:
第一步:在数据窗口中新建一个分组,假设当前组为第1组 。
第二步:再在Detial中加入一个计算列,命名为compute_1,把Visible = false,计算列的表达式设为If(cumulativeSum( 1 for group 1) = 1 , 1 ,0)
这样可以确定每一个分组第一行的compute_1值为1,其他行数在当前分组中为0,为下一步打好基础。
第三步:再在Detial区域中放入第二个计算列compute_2,把表达式定义为:
cumulativeSum( compute_1 for  all)
这样compute_2所显示的即是所要得到的当前行所在的组的行数。由于第二步的表达式使得每一组中只有第一行的数值为1,其他均为0,所以可以使用cumulativeSum使用函数得到 当前组的行数。
其中使用了数据窗口函数cumulativeSum(),该函数简介如下:
功能 计算从头开始到当前行(包括当前行)位置的累进和。
语法 CumulativeSum ( column { FOR range } )
参数 column:指定要计算累进和的列。column可以是列名,也可以使用以#开始的列号,还可以是其值代表列的表达式。column的类型必须是数值型数据类型。
range:可选项,指定计算累进和的数据范围。对大多数风格的数据窗口来说,range的有效取值为:
1、ALL棗缺省值,计算指定列所有行的累进和
2、GROUP n 棗计算第n组中指定列的累进和,n指定组号
3、PAGE  棗计算当前页中指定列的累进和对交叉表(Crosstab)风格的数据窗口对象来说,range的有效取值为CROSSTAB,表示计算交叉表中该列所有数据行的累进和。
对Graph和OLE对象来说,在range中指明对象类型。聚合函数的值由该对象本身定义的数据范围决定,range的有效取值为:
4、Graph棗只用于Graph对象,行的范围由Graph对象的Row选项决定
5、OBJECT棗只用于OLE对象,行的范围由OLE对象的Row选项决定
返回值  与指定列的数据类型相同。函数返回指定列指定范围数据的累进和。
用法  指定range参数后,在range参数指定的每个范围开始时,CumulativeSum()函数从头开始计算累进和。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/06/1869495.aspx

本题旨在解决Datawindow.net 系列一 中提到的,vs2.0 web 应用程序,不支持datawindow.net 2.0的问题,解决方法如下:
解决方案资源管理器/引用,右击,添加引用/浏览, 选择如下四个文件:
Sybase.PowerBuilder.Db.dll
WebDataWindow.dll
DataWindow.dll
DataWindowInterop.dll
如上,vs2.0 web 应用程序,可以使用DataWindow.net2.0了。

系列 五--讲述page的分页
可以看看实现的效果图

CheckBox:Show Page Info------show or hide Page total information
DropDownList:Place-----show page navigation top , bottom or topbottom
ChekBox:Image Navigation---determine whether use arrow image or not
DropDownList:Page Type----determine use whick page navigation :NextPrev,NextPrevWithQuickGo,Numeric, NumericWithQuickGo, QuickGo
DropDownList:Goto Page Type:---quick go type:edit or dropdownlist(hide)

--------------------------------------------------------------------------------

aspx code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo002.aspx.cs" Inherits="itwms.page.demo002" %>
<%@ Register Assembly="WebDataWindow" Namespace="Sybase.DataWindow.Web" TagPrefix="dw" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>DataWindow.Net Page Demo</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="typeLabel" runat="server" Text="Page Type:" Width="77px" style="z-index: 100; left: 8px; overflow: auto; position: absolute; top: 76px;"></asp:Label>
        <asp:Label ID="gotoPageTypeLabel" runat="server" Style="z-index: 100; left: 8px; overflow: auto;
            position: absolute; top: 100px" Text="GoTo Page Type:" Width="122px" Visible="False"></asp:Label>
        <asp:Label ID="placeLabel" runat="server" Style="z-index: 100; left: 8px; overflow: auto;
            position: absolute; top: 29px" Text="Place:" Width="83px"></asp:Label>
        &nbsp;
        <div style="width: 860px; height: 323px; z-index: 100; left: 14px; overflow: auto; position: absolute; top: 130px;">
        <dw:WebDataWindowControl ID="webDWcntrl" runat="server" DataWindowObject="dw_cust_grid" Height="291px" LibraryList="~/page/northwind.pbl" Width="824px" AutoRestoreDataCache="True" AutoSaveDataCacheAfterRetrieve="True" PagingMethod="Callback" RowsPerPage="10" Visible="False">
            <PageNavigationBarSettings Visible="True">
                <BarStyle Font-Names="Verdana" Font-Size="Medium" />
            </PageNavigationBarSettings>
        </dw:WebDataWindowControl>
        </div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Generate" style="z-index: 100; left: 787px; overflow: auto; position: absolute; top: 15px;" />
        <asp:CheckBox ID="imageCheckBox" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 53px;" Text="Image Navigation" Width="174px" />
        &nbsp;
        <asp:CheckBox ID="pageInfoCheckBox" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 5px;" Text="Show Page Info" Width="176px" />
        <asp:DropDownList ID="placeDropDownList" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 28px;" Width="176px" >
            <asp:ListItem>Top</asp:ListItem>
            <asp:ListItem>Bottom</asp:ListItem>
            <asp:ListItem>TopBottom</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="typeDropDownList" runat="server" style="z-index: 100; left: 99px; overflow: auto; position: absolute; top: 76px;" Width="176px" OnSelectedIndexChanged="typeDropDownList_SelectedIndexChanged" AutoPostBack="True" >
            <asp:ListItem Selected="True">NextPrev</asp:ListItem>
            <asp:ListItem>NextPrevWithQuickGo</asp:ListItem>
            <asp:ListItem>Numeric</asp:ListItem>
            <asp:ListItem>NumericWithQuickGo</asp:ListItem>
            <asp:ListItem>QuickGo</asp:ListItem>
        </asp:DropDownList>
        &nbsp;
        <asp:DropDownList ID="gotoPageTypeDropDownList" runat="server" style="z-index: 100; left: 134px; overflow: auto; position: absolute; top: 100px;" Width="176px" OnSelectedIndexChanged="typeDropDownList_SelectedIndexChanged" AutoPostBack="True" Visible="False" >
            <asp:ListItem>Edit</asp:ListItem>
            <asp:ListItem>DropDowList</asp:ListItem>
        </asp:DropDownList></div>
    </form>
</body>
</html>
cs code:

--------------------------------------------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace itwms.page
{
    public partial class demo002 : System.Web.UI.Page
    {
        private Sybase.DataWindow.Transaction Trans;
        private System.ComponentModel.IContainer container;
        protected void Page_Load(object sender, EventArgs e)
        {
            InitializeComponent();
            //if (!IsPostBack)
            //{
            //    Trans.Connect();
            //    webDWcntrl.SetTransaction(Trans);
            //    webDWcntrl.Retrieve();
            //}
        }
        private void InitializeComponent()
        {
            container = new System.ComponentModel.Container();
            Trans = new Sybase.DataWindow.Transaction(container);
            Trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;
            Trans.Password = "password";
            Trans.UserId = "sa";
            Trans.AutoCommit = false;
            Trans.Lock = "RC";
            Trans.DbParameter = "PROVIDER='SQLOLEDB',DATASOURCE='server',PROVIDERSTRING='database=Northwind'";
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            webDWcntrl.Visible = true;
            Trans.Connect();
            webDWcntrl.SetTransaction(Trans);
            webDWcntrl.Retrieve();
            setProperties();
        }
        private void setProperties()
        {
            if (pageInfoCheckBox.Checked)
            {
                webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Visible = true;
                webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Position = Sybase.DataWindow.Web.PageStatusInfoPosition.Right;
            }
            else
            {
                webDWcntrl.PageNavigationBarSettings.PageStatusInfo.Visible = false;
            }
            switch (placeDropDownList.SelectedIndex)
            {
                case 0:
                    webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.Top;
                    break;
                case 1:
                    webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.Bottom;
                    break;
                case 2:
                    webDWcntrl.PageNavigationBarSettings.Position = Sybase.DataWindow.Web.NavigationBarPosition.TopAndBottom;
                    break;
                default:
                    goto case 1;
            }
            if (imageCheckBox.Checked)
            {
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.FirstPageImageUrl = Page.Server.MapPath("../image/PageFirst.gif");
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.PrevPageImageUrl = Page.Server.MapPath("../image/PagePrior.gif");
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.NextPageImageUrl = Page.Server.MapPath("../image/PageNext.gif");
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.LastPageImageUrl = Page.Server.MapPath("../image/PageLast.gif");
            }
            else
            {
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.FirstPageImageUrl = "";
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.PrevPageImageUrl = "";
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.NextPageImageUrl = "";
                webDWcntrl.PageNavigationBarSettings.NextPrevNavigator.LastPageImageUrl = "";
            }
            switch (typeDropDownList.SelectedIndex)
            {
                case 0:
                    webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NextPrev;
                    break;
                case 1:
                    webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NextPrevWithQuickGo;
                    break;
                case 2:
                    webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.Numeric;
                    break;
                case 3:
                    webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.NumericWithQuickGo;
                    break;
                case 4:
                    webDWcntrl.PageNavigationBarSettings.NavigatorType = Sybase.DataWindow.Web.PageNavigatorType.QuickGo;
                    break;
                default:
                    goto case 0;
            }
            if (typeDropDownList.SelectedIndex.Equals(4))
            {
                switch (gotoPageTypeDropDownList.SelectedIndex)
                {
                    case 0:
                        webDWcntrl.PageNavigationBarSettings.QuickGoNavigator.Type = Sybase.DataWindow.Web.QuickGoPageNavigatorType.Edit;
                        break;
                    case 1:
                        webDWcntrl.PageNavigationBarSettings.QuickGoNavigator.Type = Sybase.DataWindow.Web.QuickGoPageNavigatorType.DropDownList;
                        break;
                }
            }
        }
        protected void typeDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            imageCheckBox.Visible = true;
            switch (typeDropDownList.SelectedIndex)
            {
                case 2:
                    goto case 3;
                case 4:
                    gotoPageTypeDropDownList.Visible = true;
                    gotoPageTypeLabel.Visible = true;
                    goto case 3;
                case 3:
                    imageCheckBox.Checked = false;
                    imageCheckBox.Visible = false;
                    break;
            }
        }
    }
}

当然这些,是通过code实现的,因为我为了页面实现多种分页方式,下面介绍一下,属性设置某一种分页方式:
如图:

我们可以随意设置,几个需要强调的地方:
a,RowsPerPage不能为0;
b,各自对应的visible不要忘记;


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/07/1872044.aspx

这几天,一直在测试datawindow.net 2.0+vs2..5共用的问题,觉得总体还不错,虽然已经发布到v2.0,v2.5也已经到评估阶段,另我不满意的就是,参考资料,确实太少,很多问题,都要自己测试,总结,也坚定了我把这个系列写下去的决心,方便后来的新手,能入门更快一些。
以上5个系列的简述,也是我测试的过程,属于边测试边总结吧。
本系列的测试环境为:
vs2.0+sql server 2000+ajax
主要目的:
1,要弄清楚datawindow.net是不是真的强大?关系到,下一个项目的开发架构。
2,与ajax是否兼容?
3,中文问题,会否出现乱码?其实,就是多语言问题啦。
到目前测试阶段,赶到datawindow.net还可以,但是也许是技术新或者使用不多,发现参考文档有限,开发会多少碰到些问题,还好有些pb开发的功底,否则又要费时了!也算间接回答了第一个问题,算是强大吧!对.net来说,作为一个控件来理解吧,有人这么比喻:“.net是一辆汽车,datawindow.net就是为这辆汽车,装了一个豪华的轮子!”你认为呢?
ajax的问题,还没有发现冲突的地方,Sybase,MS应该考虑这个问题了,毕竟大公司。
多语言问题,我还没有完成,待续吧。。。
附加一个问题:
【问题描述】
使用webDataWindowControl,在页面上加载了一个Search button,设计的目的是通过search button触发,webDataWindowControl加载data,显示等。但是在分页时出现无法加载数据。
【原因】翻页时,需要重新set transaction,这点我忽略了
【解决办法】每次翻页,设置一次set transaction 加载一个数据,每次page_load,都执行一次,似乎解决了问题,但是这样很浪费资源,其实sybase已经提供了解决的方法,只要如图进行设置即可:

AutoRestoreDataCache:
Automatically restore the data cache during page postback.
AutoSaveDataCacheAfterRetrieve:
Automatically save the data as cache after retrieve finishes sucdessfully.
ok,天下太平了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/12/1880756.aspx

贴出来问题图形

Pic-001

pic-002
在tabpage中,通过单击pic-001的某一行,转到另外的tabpage,显示detail information,思索,待续。。。
经过研究,准备使用ICallbackEventHandler的客户端回调事件。

--------------------------------------------------------------------------------

ICallbackEventHandler可以说是ajax的关键技术,现在可以使用vs2.0的接口,来实现ajax的效果。
refer to:http://www.cnblogs.com/soso/archive/2006/06/08/420687.html
六步使用ICallbackEventHandler实现无刷新回调
    AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架,使得开
发效率和可维护性大大降低。其实ASP.NET2.0中,已经提供了这样的接口,这就是ICallbackEventHandler。
    关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。
ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。
   第一步,在VS2005中建立一个新的WEB窗件。
   第二步,在ASPX中,放上一段HTML代码(如下):

1<body>
2    <form id="form1" runat="server">
3    <div>
4        <button οnclick="CallServer()">CallServer</button>
5    </div>
6    </form>
7</body>
   第三步,然后在<HEAD></HEAD>中放入一段JavaScript脚本:

 1 <script type="text/javascript">
 2     function CallServer()
 3     {
 4         var product = "测试";
 5         <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
 6     }
 7    
 8     function ReceiveServerData(rValue)
 9     {
10         alert(rValue);
11     }
12 </script>
 
   第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:
 ICallbackEventHandler.GetCallbackResult()
    和
 ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
   第五步,增加一个变量CallBackValue,并修改接口的两个方法为:

 1 private string CallBackValue = string.Empty;
 2   
 3 string ICallbackEventHandler.GetCallbackResult()
 4 {
 5  return CallBackValue + ",ok";
 6 }
 7
 8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
 9 {
10  this.CallBackValue = eventArgument;
11 }
12
 
    第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台C#代码将字符串
加上“,OK”后返回给客户端的JavaScript代码,并显示。
    以上六步,就可以实现无刷新回调了。现在,我们来分析一下几段代码。
    先看第三步中的JavaScript代码,其中的CallServer()方法中进行了回调,回调的语句为:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
   
    里面四个参数中第二个参数指定将product这个JavaScript中的字符串变量传回后台,第三个参数指定了从后
台返回时接收返回信息的JavaScript方法ReceiveServerData(string Value)。
    第五步中后台的两个方法,一个ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用来
接收前台JavaScript中传来的字符串变量,并赋值给内部变量this.CallBackValue,另一个方法
ICallbackEventHandler.GetCallbackResult()将变更后的内部变量this.CallBackValue返回给前台JavaScript方
法ReceiveServerData(string Value)。
    调用的顺序是: (前台)CallServer() --> (后台)ICallbackEventHandler.RaiseCallbackEvent(string
eventArgument) --> (后台)ICallbackEventHandler.GetCallbackResult() --> (前台)ReceiveServerData
(string Value)。
    整个调用过程非常简单,而其中非常关键的一步是第三步的
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
完整的测试代码:
aspx:
==============
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ICallbackEventHandler demo</title>
    <script type="text/javascript">
        function CallServer()
        {
            var product="hello";
            <%=ClientScript.GetCallbackEventReference(this,"product","ReceiveServerData",null) %>;
        }
        function ReceiveServerData(rValue)
        {
            alert(rValue);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="Button1" type="button" value="CallServer" οnclick="CallServer()" />
    </div>
    </form>
</body>
</html>
cs:
============
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page , ICallbackEventHandler
{
    private string CallBackValue = string.Empty;
    protected void Page_Load(object sender, EventArgs e)
    {
    }
   #region ICallbackEventHandler 成员
    string ICallbackEventHandler.GetCallbackResult()
    {
        //throw new Exception("The method or operation is not implemented.");
        return CallBackValue + ", i am server";
    }
    void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
    {
        //throw new Exception("The method or operation is not implemented.");
        this.CallBackValue = eventArgument;
    }
    #endregion
}
对各参数,更深入的研究:


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/12/1880805.aspx

先给大家一个参考学习的连接
http://objectsharp.com/cs/blogs/dave/category/86.aspx
http://www.sybase.com/products/development/datawindownet
download evaluation:
I.DataWindow .NET v2.5 Evaluation Edition(DataWindow .NET v2.5评估版)官方下载
http://www.sybase.com/detail?id=1053922暂时没有找到破解补丁。
II.
http://www.componentsource.com/products/sybase-datawindow-net/index.html(datawindow.net 2.5)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/13/1882159.aspx

本文中使用了Datawindow.net2.5:
datawindow.net在vs2.5中,保存数据,很像pb,使用UpdateData就可以了,对于使用过pb的人来说,还是非常方便的。
UpdateData(true,true);
同时export各种format的文件,也是非常方便的
dw.SaveAs(@"c:\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", Sybase.DataWindow.FileSaveAsType.Excel, false);
dw.SaveAs(@"c:\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf", Sybase.DataWindow.FileSaveAsType.Pdf, false);
dw.SaveAs(@"c:\image" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".doc", Sybase.DataWindow.FileSaveAsType.Doc, false);
dw.SaveAs(@"c:\image" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".html", Sybase.DataWindow.FileSaveAsType.Html, false);
这里,仅仅列举四种格式,具体可以查看Sybase.DataWindow.FileSaveAsType,确实挺方便;
但是,出现另外一个问题,一度困扰着我,就是数据库字符集的问题,由于多种原因,我的数据库字符选择,如图示:

在database里,使用select是看不到中文的,只是看到,类似乱码的latin编码,当然你的database如果使用简体中文字符集,那么完全不必理会我这一部分的内容,因为对你没有用处了。
不过还是有解决方法的,只有进行两次转换即可:呈现数据时,保存数据时;
protected void dw_RowRetrieved(object sender, Sybase.DataWindow.RowRetrievedEventArgs e)
{
  int rowNum = e.RowNumber;
  int colNum = dw.ColumnCount;
  for (int i = 1; i <= colNum; i++)
    {
      string colName = dw.Describe("#" + i + ".Name");
      string dwStrTemp = dw.GetItemString(rowNum, Convert.ToInt16(i));
      dw.SetItemString(rowNum, Convert.ToInt16(i), ParseString(dwStrTemp));
    }
}

--------------------------------------------------------------------------------

int rowCount = dw.RowCount;
int colCount = dw.ColumnCount;
for(int i=1;i<=rowCount;i++)
{
    for (int j = 1; j <= colCount; j++)
    {
string colValue = dw.GetItemString(i, Convert.ToInt16(j));
string colValueDB = ParseSql(colValue);
dw.SetItemString(i, Convert.ToInt16(j), colValueDB);
    }
}
dw.UpdateData(true, true);
上面提到的ParseString, ParseSql:
1252--english,950--繁体中文,936--简体中文

static public int databaseCharset = 1252;
static public int displayCharset = 950;
static public string ParseString(string str)
{
    byte[] b = Encoding.GetEncoding(databaseCharset).GetBytes(str);
    return Encoding.GetEncoding(displayCharset).GetString(b);
}
static public string ParseSql(string str)
{
    byte[] b = Encoding.GetEncoding(displayCharset).GetBytes(str);
    return Encoding.GetEncoding(databaseCharset).GetString(b);
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/19/1893282.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FollowIT/archive/2007/11/05/1867932.aspx

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值