実行時画面
MultiRowにデータを表示する方法として、今回はObjectDataSourceを使ってデータアクセス用のクラスと連結しています。例えば、一覧を取得するGetRecordsメソッドのコードは、次のようになります。
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プロパティに設定すれば、レコードの内容に応じた一覧表が表示できます。
それでは、InputManセルの1つ1つについて、標準セルとの違いを確認してみましょう。
テキスト入力
図4は、標準のTextBoxセルのMaxLengthプロパティを「30」、InputManセル、ImEditCellのMaxLengthプロパティを「30」にしたものです。
入力可能文字数の違いに注目してください。実際にサンプルで文字を入力してみると、ImEditCellでは15文字しか入力できないようになっています。これは、ImEditCellの独自プロパティであるLengthAsByteプロパティを「True」にして、バイト数で制限をかけているからです。もちろんLengthAsByteプロパティを「False」にすればTextBoxセルと同じ制限になります。
ImEditCellには、この他にも入力可能文字数まで入力したら次のセルへ自動的にフォーカスを移動させるExitOnLastCharプロパティなど、好みに合った文字の入力を実現する機能が搭載されています。