yss*2*6のブログ

登山とプログラム開発メモをプログに載せます。コメント歓迎です。

全体表示

[ リスト ]

DataRepeaterコントロール再セットの方法

DataRepeaterコントロール再セットの方法

以前、マスターメンテナンス画面をASP.Netにて実装と試みたが、自社からの指示でVb.netで実装することと
なった。このため、試験的に仮のマスタ画面をDataRepeaterコントロールを付与したフォームにて、
作成している。基本仕様は以下のとおりである。
 ・テーブル名からカラム名を取得し、それと同一名のコンポーネントを動的に作成かつ、
  そのテーブルのカラム名と動的にバインドし、一覧表示する
 ・保存、削除を行単位に行い、検索機能も付与する
 
上記仕様とするため、動的にSqlDataAdapter,Dataset,BindDataを作成、各コンポーネントに
バインドするようにした。
Form_Loadのソースはこんな感じである。
 
 'タイトルの設定
        Me.TableLabel.Text = titlename
        Me.SetTitle(titlename)
        'テーブル情報の取得 テーブルカラム名⇒長さのハッシュ
        TableInfo = DBcontroller.GetTableColumnsInfo(Table_Name)
      
        'SQLデータアダプターの設定
        SetsqlDataAdapter()
        Dset = New DataSet
        sDp.Fill(Dset)
        'バインドデータの作成
        bindData = New BindingSource()
        bindData.DataSource = Dset
        bindData.DataMember = "table"
        'フローレイアウトにコンポーネントを配置し、バインドする
        For Each key In TableInfo.Keys
            'rec_idは表示しない
            If Not key = "rec_id" Then
                Dim lb As Label = New Label()
                lb.Text = key
                lb.Name = "label_" & key
                FlowLayoutPanel1.Controls.Add(lb)
            End If
          
            Dim lx As TextBox = New TextBox()
            lx.MaxLength = TableInfo(key)
            lx.Name = key
            lx.DataBindings.Add(New Binding("Text", bindData, key, True))
            'rec_idは非表示にする
            If key = "rec_id" Then
                lx.Visible = False
            End If
            '更新日付けはReadOnly
            If key = "upd_date" Then
                lx.ReadOnly = True
            End If
            FlowLayoutPanel1.Controls.Add(lx)
        Next
        DataRepeater1.DataSource = Dset.Tables(0)
 
 検索機能を実装したのだが、DataRepeaterに検索結果を再バインドしたが、
 その結果が反映されかった。これは、既に設定ずみDataSetに対して、
 再度、SqlDataAdapterでFillしても、データは残ったままになっているようである。
 この場合、DataSetをクリアしてからFillする反映された。ソースは以下の
 とおりである。
   Dim dbcontrol As CDBControl = CDBControl.getInstance
        Dim WherePhase As New StringBuilder
        Dim bFirst As Boolean = True
        'Where句の作成
        For Each ccontrol As Control In SearchPanel.Controls
            If Not (TypeOf ccontrol Is TextBox) Then
                Continue For
            End If
            If ccontrol.Text.Length = 0 Then
                Continue For
            End If
            If Not bFirst Then
                WherePhase.Append(" And ")
            End If
            WherePhase.Append(ccontrol.Name)
            WherePhase.Append("='")
            WherePhase.Append(ccontrol.Text)
            WherePhase.Append("'")
            bFirst = False
        Next
        '検索条件未設定の場合
        If WherePhase.ToString.Length = 0 Then
            Return
        End If
        'Selectコマンドの作成
        Dim Selectbuf As StringBuilder = MakeSelectCommand()
        Selectbuf.Append(" Where ")
        Selectbuf.Append(WherePhase)
        sDp.SelectCommand = New SqlCommand(Selectbuf.ToString, dbcontrol.GetConnection)
        Dset.Clear()
        sDp.Fill(Dset)
        'バインドデータの作成
        bindData.DataSource = Dset
        bindData.DataMember = "table"
        DataRepeater1.DataSource = Dset.Tables(0)
  できた画面は以下のようになる
イメージ 1
 

閉じる コメント(0)

コメント投稿
名前パスワードブログ
絵文字
×
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

閉じる トラックバック

トラックバック先の記事

  • トラックバック先の記事がありません。

.

人気度

ヘルプ

Yahoo Image

友だち(1人)
Yahoo Image

 今日全体
訪問者1027963
ブログリンク00
コメント078
トラックバック00

ケータイで見る

モバイル版Yahoo!ブログにアクセス!

モバイル版Yahoo!ブログにアクセス!

URLをケータイに送信
(Yahoo! JAPAN IDでのログインが必要です)

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

標準グループ

登録されていません

毎月60万ポイントをブロガーで山分け
楽しい話題がいっぱい(Y! Suica)

プライバシーポリシー -  利用規約 -  ガイドライン -  順守事項 -  ヘルプ・お問い合わせ

Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事