■閉鎖した昔のブログの記事復活
[2025/05/12] VB.NET:Spread(GrapeCity)のシートへの簡単な一覧データの設定について (No.413)
[2025/05/12] VB.NET:Spread(GrapeCity)のヘッダカラム及び、通常のカラムの連結 (No.412)
[2025/05/12] VB.NET:Spread(GrapeCity)フォーカスを持っていない時にセル枠を表示しない設定 (No.411)
[2025/05/12] VB.NET:Spread(GrapeCity)でのEnter時にセルを右移動させる方法 (No.410)
[2025/05/12] Oracle:CSE(Common SQL Environment)からORACLEへの接続 (No.409)
[2025/05/12] VB.NET:Spread(GrapeCity)のヘッダカラム及び、通常のカラムの連結 (No.412)
[2025/05/12] VB.NET:Spread(GrapeCity)フォーカスを持っていない時にセル枠を表示しない設定 (No.411)
[2025/05/12] VB.NET:Spread(GrapeCity)でのEnter時にセルを右移動させる方法 (No.410)
[2025/05/12] Oracle:CSE(Common SQL Environment)からORACLEへの接続 (No.409)
-
SPREADを使って一覧データを表示することはよくあります。今回は、簡単なデータを一覧表示させる方法です。
以下のソースは、フォームロード時にSPREADの初期化を行っています。 アクティブシートのカラム数を3に設定し、ヘッダ行数を0でクリア設定しています。
フォーム表示後、ボタンをクリックすると、 クリックイベント内で宣言された固定的なテストデータをSPREADに設定し表示させます。
データの1行分毎の処理で、「RowCount」プロパティを+1して行を追加します。 次に、追加された行にカラムデータを1セル毎に「Value」プロパティに設定します。 セルの「Text」プロパティでもほぼ同じ結果になりますが、 第1セルの"001"の値の先頭ゼロが省かれて"1"となってしまいます。
1カラム目のCellTypeが何も設定されていませんので、 「Text」プロパティでデータ設定するとデフォルトでは先頭ゼロは省かれる様です。
もし、「Text」プロパティを使うのであれば、CellTypeを「TextCellType」に設定する必要があります。 (各セル毎にCellTypeを設定する方がいいのですが)
「Value」プロパティの場合は、そのままのデータが設定されるので"001”と表示される様です。
Public Class Form1 'フォームロード時にSPREADの初期化 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.FpSpread1.ActiveSheet 'SPREADのアクティブシートのカラム数を3に設定 .ColumnCount = 3 'SPREADの行クリア .RowCount = 0 End With End Sub 'ボタンクリックでカラム連結処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '仮に4行分のデータ Dim ArrData(,) As String = { _ {"001", "Content001", "Test001"}, _ {"002", "Content002", "Test002"}, _ {"003", "Content003", "Test003"}, _ {"004", "Content004", "Test004"} _ } 'ソースが長くなるのでWith宣言 With Me.FpSpread1.ActiveSheet 'データの行数分の処理 For i As Integer = 0 To ArrData.GetLength(0) - 1 '行数を増やす .RowCount += 1 'カラム数分をセルに設定 For j As Integer = 0 To ArrData.GetLength(1) - 1 '.Cells(i, j).Text = ArrData(i, j) 'こちらは"001"⇒"1"と表示される .Cells(i, j).Value = ArrData(i, j) '書式無しで生のデータを設定 Next Next End With End Sub End Class
下図は、最初、フォームが表示された時の様子です。
その後、ボタンをクリックした結果が以下の図です。
尚、ソースの中で使っている「ArrData.GetLength(0)」ですが、これは1次元目の個数を取得するものです。 「ArrData.GetLength(1)」は2次元目の個数です。
=====
2016/02/29:の時の情報
PR -
今回は、SPREADのヘッダカラム及び、通常のシート上のセルの連結方法についてです。
ヘッダカラムのプロパティ「ColumnHeader」の「Cells」で連結するセルの「ColumnSpan」プロパティに そのカラムから右方向に連結するセル数を指定します。
通常のシート上のカラムも同様に「Cells」で指定したセルの「ColumnSpan」を設定します。
以下のソースは、フォームロード時にSPREADの初期化を行っています。 アクティブシートのカラム数、ヘッダ行数を設定した後で、 ヘッダカラムに、行位置とカラム位置を文字列化したものを設定しています。
フォーム表示後、ボタンをクリックすると、ヘッダの1行目のカラムを1個置きに連結します。 また、シート上のカラムを1行置きに、2個ずつ連結しています。
Public Class Form1 'フォームロード時にSPREADの初期化 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'SPREADがフォーカスを持っていないときにセル枠の表示をしない設定 Me.FpSpread1.RetainSelectionBlock = False 'SPREADのアクティブシートのカラム数を6に設定 Me.FpSpread1.ActiveSheet.ColumnCount = 6 'SPREADのアクティブシートのヘッダ行数を2に設定 Me.FpSpread1.ActiveSheet.ColumnHeaderRowCount = 2 'ヘッダカラムに文字列設定 For row As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnHeaderRowCount - 1 For i As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnCount - 1 '行位置 + " - " + カラム位置 Me.FpSpread1.ActiveSheet.ColumnHeader.Cells(row, i).Value = row & " - " & i Next Next End Sub 'ボタンクリックでカラム連結処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'ヘッダーのカラムを2個ずつ連結する For i As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnCount / 2 - 1 Me.FpSpread1.ActiveSheet.ColumnHeader.Cells(0, i * 2).ColumnSpan = 2 Next 'シート上のカラムを1行おきに、2個ずつ連結する For row As Integer = 0 To Me.FpSpread1.ActiveSheet.RowCount - 1 '行番号が偶数?? If row Mod 2 = 0 Then 'カラムを2個ずつ連結する For i As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnCount / 2 - 1 Me.FpSpread1.ActiveSheet.Cells(row, i * 2).ColumnSpan = 2 Next End If Next End Sub End Class
下図は、最初、フォームが表示された時の様子です。
その後、ボタンをクリックした結果が以下の図です。
尚、ActiveSheetのメソッドである「AddColumnHeaderSpanCell」「AddSpanCell」を使っても同様のことができます。 このメソッドは上記の、「ColumnSpan」プロパティへの設定を行っているだけだとは思いますが。
'ボタンクリックでカラム連結処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '行ヘッダーのカラムを2個ずつ連結する For i As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnCount / 2 - 1 Me.FpSpread1.ActiveSheet.AddColumnHeaderSpanCell(0, i * 2, 1, 2) Next 'シート上のカラムを1行おきに、2個ずつ連結する For row As Integer = 0 To Me.FpSpread1.ActiveSheet.RowCount - 1 '行番号が偶数?? If row Mod 2 = 0 Then 'カラムを2個ずつ連結する For i As Integer = 0 To Me.FpSpread1.ActiveSheet.ColumnCount / 2 - 1 Me.FpSpread1.ActiveSheet.AddSpanCell(row, i * 2, 1, 2) Next End If Next End Sub
=====
2016/02/29:の時の情報
-
今回は、簡単なTIPSですが、SPREADがフォーカスを持っていない時にセル枠の表示をしない設定があります。
SPREADはフォーカスを持っているときには、以下の様にアクティブセルの枠が太枠で表示されます。
SPREADコントロールの「RetainSelectionBlock」プロパティをFalseにすれば枠が通常のものになります。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'SPREADがフォーカスを持っていないときにセル枠の表示をしない設定があります。 Me.FpSpread1.RetainSelectionBlock = False End Sub
SPREADからボタンにフォーカスを移動すると、以下の様になります。 (ボタンのクリック時イベントの処理には何も記述していないので、 ボタンをクリックすることでフォーカスは移動します。)
=====
2016/02/29:の時の情報
-
データの一覧や、エクセルライクでの入力などでよく「SPREAD for Windows Forms」を使用しています。 このSPREADですが、Microsoft純正のGridViewなどよりは使い勝手がいいのですが、使い方の癖があります。
今後はいろんなTIPSを載せていこうかなと思っています。
先ずは最初に簡単なところで、SPREAD上で「Enter」キーを押下した時に次のセルに移動させる方法です。 以下の様に通常は、フォームのLoad時イベントなど設定してやります。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'ENTER時にセルを右移動させる Dim im As New FarPoint.Win.Spread.InputMap ' 非編集セルでの[Enter]キーを「次列へ移動」とします im = Me.spdList.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused) im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), _ FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap) im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.Shift), _ FarPoint.Win.Spread.SpreadActions.MoveToPreviousColumnWrap) ' 編集中セルでの[Enter]キーを「次列へ移動」とします im = Me.spdList.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused) im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), _ FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap) im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.Shift), _ FarPoint.Win.Spread.SpreadActions.MoveToPreviousColumnWrap) End Sub
=====
2016/02/29:の時の情報
-
前回では、CSEから「PostgreSQL」に接続する方法を載せましたが、今回はオラクルへの接続についてです。
CSEでオラクルのデータベースに接続するには、「ociw32.dll」というDLLが必要な様です。 この「ociw32.dll」は通常このDLLはOracleホームディレクトリ以下のbinディレクトリに格納されています。
今回の接続テストは、同一PC上でオラクルとCSEをインストトールし行いました。 OSはWindows7で、オラクルは「Oracle Database 11g Express Edition」をインストールしました。 そこで、環境変数の「ORACLE_HOME」を設定されていることを確認します。
「Oracle Database 11g Express Edition」は、デフォルトでインストールすれば 「ORACLE_HOME」の値は「C:\oraclexe\app\oracle\product\11.2.0\server」になっているはずです。
それとPATHが通っていることを確認します。 「C:\oraclexe\app\oracle\product\11.2.0\server\bin;」が、 環境変数の「Path」に設定されていることを確認します。 (このパスは「ociw32.dll」が存在するフォルダです)
では実際にオラクルへの接続を行います。 下図はCSEからの接続時の様子です。 テストユーザとして「TEST」での接続を行います。 尚、このユーザは既にパスワードを「TEST」とし、「DBA」権限を与えてあります。 接続文字列として「localhost:1251/xe」を指定します。
接続文字列は host[:port][/service_name]です。
・host:接続先サーバのIPアドレス(今回は同一PC上なので「localhost」)
・port:ポート番号(デフォルト:1251)
・service_name:接続先のデータベース・サービスの名前です。Oracle Database XEのサービス名はXEです
接続後は以下の表示になります。
実際にSQLの実行を行ってみます。
システム時刻の取得を行いました。
=====
2016/02/27:の時の情報