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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章