SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(MultiRow)

MultiRow for ASP.NET+InputMan for ASP.NETの最強タッグInputManCellを検証する

  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (27.7 KB)

実行時画面

 MultiRowにデータを表示する方法として、今回はObjectDataSourceを使ってデータアクセス用のクラスと連結しています。例えば、一覧を取得するGetRecordsメソッドのコードは、次のようになります。

リスト1 ObjectDataSourceと連結して使うクラスのメソッド例
Public Function GetRecordsByIndex(ByVal userID As String,
                                  ByVal password As String,
                                  ByVal billNo As String,
                                  ByVal startRowIndex As Integer,
                                  ByVal maximumRows As Integer) As DataSet
    Dim ds As New DataSet
    Using _cn As New OleDb.OleDbConnection()
        _cn.ConnectionString = String.Format(System.Configuration.ConfigurationManager.AppSettings("ConnectionString"),
                                             userID,
                                             password)
        _cn.Open()
        Using _cmd As New OleDb.OleDbCommand
            _cmd.Connection = _cn
            If startRowIndex = 0 Then
                _cmd.CommandText =
                    String.Format(
                        "SELECT TOP {0} Bill.*, BillCondition.*, Customers.CustomerName," &
                               "Bill.UnitPrice*Bill.Number AS Price2 " &
                          "FROM Customers " &
                         "INNER JOIN (Bill INNER JOIN BillCondition " &
                                             "ON Bill.BillNo = BillCondition.BillNo)" &
                            "ON Customers.CustomerID = Bill.CustomerID " &
                         "WHERE Bill.BillNo=? " &
                         "ORDER BY Bill.CustomerID,Bill.BillNo,Bill.Date,Bill.SlipNo,Bill.ID",
                         maximumRows, startRowIndex - 1)
            Else
                _cmd.CommandText =
                    String.Format(
                        "SELECT Bill.*, BillCondition.*, Customers.CustomerName," &
                               "Bill.UnitPrice*Bill.Number AS Price2 " &
                          "FROM Customers " &
                         "INNER JOIN (Bill INNER JOIN BillCondition " &
                                             "ON Bill.BillNo = BillCondition.BillNo)" &
                            "ON Customers.CustomerID = Bill.CustomerID " &
                         "WHERE Bill.ID IN (SELECT TOP {0} ID " &
                                             "FROM Bill AS T1 " &
                                             "LEFT JOIN (SELECT TOP {1} ID AS ID2 " &
                                                          "FROM Bill " &
                                                         "WHERE Bill.BillNo=? " &
                                                         "ORDER BY  Bill.BillNo,Bill.Date,Bill.SlipNo,Bill.ID) AS T2 " &
                                               "ON T1.ID=T2.ID2 " &
                                            "WHERE T2.ID2 IS NULL " &
                                              "AND T1.BillNo=? " &
                                            "ORDER BY T1.BillNo,T1.Date,T1.SlipNo,T1.ID) " &
                         "ORDER BY Bill.CustomerID,Bill.BillNo,Bill.Date,Bill.SlipNo,Bill.ID",
                         maximumRows, startRowIndex - 1)
            End If
            _cmd.Parameters.AddWithValue("@billNo1", billNo)
            _cmd.Parameters.AddWithValue("@billNo2", billNo)
            Using _da As New OleDb.OleDbDataAdapter(_cmd)
                _da.Fill(ds, "Bill")
            End Using
        End Using
        _cn.Close()
    End Using
    Return ds
End Function

 このメソッドをObjectDataSourceのSelectMethodプロパティに設定すれば、レコードの内容に応じた一覧表が表示できます。

図3 実行時画面
図3 実行時画面

 それでは、InputManセルの1つ1つについて、標準セルとの違いを確認してみましょう。

テキスト入力

図4 ImEditCell
図4 ImEditCell

 図4は、標準のTextBoxセルのMaxLengthプロパティを「30」、InputManセル、ImEditCellのMaxLengthプロパティを「30」にしたものです。

 入力可能文字数の違いに注目してください。実際にサンプルで文字を入力してみると、ImEditCellでは15文字しか入力できないようになっています。これは、ImEditCellの独自プロパティであるLengthAsByteプロパティを「True」にして、バイト数で制限をかけているからです。もちろんLengthAsByteプロパティを「False」にすればTextBoxセルと同じ制限になります。

 ImEditCellには、この他にも入力可能文字数まで入力したら次のセルへ自動的にフォーカスを移動させるExitOnLastCharプロパティなど、好みに合った文字の入力を実現する機能が搭載されています。

次のページ
マスク入力

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(MultiRow)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5726 2011/01/31 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング