2009年07月14日


LboxGrid : チェックした CSV 行データを削除する

読み込んだ CSV 行を保存する為に、ArrayList( コレクション ) を使用しています。
ArrayList は、Add で追加し、Item( nIndex ) で参照します。

チェックボックスの追加部分は、LboxGrid に実装していますので、Add メソッドで
追加し、そのチェックボックス列を使えるようにする為に全体の ReadOnly を False
にし、列定義が終わってから列単位に ReadOnly を設定します

Form1_Load は、削除後再度呼び出す事を想定して、グリッドと配列に対しての初期処理
がなされており、sender と e が使用されていないので Form1_Load(Nothing, Nothing)
で呼び出し可能です。
Imports System.IO
Imports System.Text

Public Class Form1

	Private aList As New ArrayList()

	Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load

		' コレクションを初期化
		aList.Clear()

		' クリッドを初期化( 他から呼び出す為 )
		Me.LboxGrid1.Reset()

		' まず全てのカラムを編者可に変更
		Me.LboxGrid1.ReadOnly = False

		Me.LboxGrid1.AddColumn("CHECK", "削除", lightbox.LboxColumnType.LboxColumnType_CheckBox)
		Me.LboxGrid1.AddColumn("CODE", "社員コード")
		Me.LboxGrid1.AddColumn("NAME", "氏名")
		Me.LboxGrid1.AddColumn("KANA", "フリガナ")

		' 列作成後、必要無いカラムを編集不可にする
		Me.LboxGrid1.Columns(1).ReadOnly = True
		Me.LboxGrid1.Columns(2).ReadOnly = True
		Me.LboxGrid1.Columns(3).ReadOnly = True

		Try
			' SHIFT_JIS 
			Dim ReadFile As StreamReader = _
			 New StreamReader("C:\TMP\社員マスタ.csv", Encoding.GetEncoding(932))

			' SHIFT_JIS で読み込み
			Dim LineText As String
			Dim aData As String()
			Dim sDelimiter As String = ","
			Do While Not ReadFile.EndOfStream
				' 次行読み込み
				LineText = ReadFile.ReadLine()

				' コレクションに追加
				aList.Add(LineText)

				' 列用に分解
				aData = LineText.Split(sDelimiter)

				' 行追加
				LboxGrid1.AddRow()

				' セルデータセット
				LboxGrid1.SetColumnText("CODE", aData(0))
				LboxGrid1.SetColumnText("NAME", aData(1))
				LboxGrid1.SetColumnText("KANA", aData(2))

			Loop

			' 終了処理
			ReadFile.Close()
			ReadFile.Dispose()

			' ex が必要無ければ e As Exception を書かなくて良い
		Catch ex As Exception
			Console.WriteLine(ex.Message)
		End Try

	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles Button1.Click

		' 書き込み用ストリーム
		Dim WriteFile As New System.IO.StreamWriter("C:\TMP\社員マスタ.csv", False, _
		   System.Text.Encoding.GetEncoding(932))

		' サーチインデックス初期化
		Me.LboxGrid1.SetCurrentRow()

		' 行がなくなるまでループ
		Do While (Me.LboxGrid1.FindNextRow())

			' チェックしていなものを書き出す
			If Not CType(Me.LboxGrid1.GetColumnValue("CHECK"), Boolean) Then
				' 内部行変数 nCurrentRow を使用する
				WriteFile.WriteLine(CType(aList.Item(Me.LboxGrid1.nCurrentRow), String))
			End If

		Loop

		' 閉じる
		WriteFile.Close()

		' グリッドを初期化
		Form1_Load(Nothing, Nothing)

	End Sub

End Class



posted by at 2009-07-14 15:48 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します