ISBNバーコードをFlexGridに表示してみよう (UWP編)
ISBNコードは書籍に付ける13桁のJANコードです。JANコードは、世界的にはEANコードと呼ばれています。13桁のISBNコードは、バーコードのタイプとしてはEAN-13ということになります。
BarCodeコントロールも、ほかの一般的なコントロールと同様に、コンテナコントロールの中に配置できます。グリッドの列にバーコードを表示してみましょう。ここではグリッドとして、ComponentOneのFlexGridコントロールを使います(もちろん、標準のGridViewコントロールなどでも表示できます)。
ここではUWPで紹介していきますが、Windows Forms/WPFでもFlexGridコントロールの基本的な使い方は同じです。
ライセンスと参照の設定
プロジェクトを作成したら、「QRコードを表示してみよう(UWP編)」と同様にして、ライセンスキーの取得と設定、および、参照の追加を行います。今度はFlexGridコントロールも使うので、参照には[C1.UWP]と[C1.UWP.BarCode]のほかに、[C1.UWP.FlexGrid]も追加します。
XAMLの記述
まず、XAMLの先頭に名前空間の定義を追加します(次のコード)。
<Page ……省略…… xmlns:c1BarCode="using:C1.Xaml.BarCode" xmlns:c1FlexGrid="using:C1.Xaml.FlexGrid" x:Class="IsbnUwp.MainPage" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
次にコントロールを記述していきます。次のコードに、FlexGridコントロールと、その中に配置したBarCodeコントロールの部分だけを掲載します。表示のときはBarCodeコントロールを使い、そのセルをダブルクリックして編集モードにしたときはTexBoxコントロールに切り替えるようにしています。XAMLコードの全体は、GitHubでご覧ください。
<c1FlexGrid:C1FlexGrid x:Name="flexgrid1" AutoGenerateColumns="False" ……省略…… > <c1FlexGrid:C1FlexGrid.Columns> ……省略…… <c1FlexGrid:Column Header="ISBN" ……省略…… Binding="{Binding Isbn,Mode=TwoWay}" > <!-- 表示時のテンプレート --> <c1FlexGrid:Column.CellTemplate> <DataTemplate> <Grid VerticalAlignment="Center"> <c1BarCode:C1BarCode Text="{Binding IsbnWithoutCheckDigit, Mode=OneWay}" CaptionPosition="Above" CaptionGrouping="True" CodeType="EAN_13" /> </Grid> </DataTemplate> </c1FlexGrid:Column.CellTemplate> <!-- 編集時のテンプレート --> <c1FlexGrid:Column.CellEditingTemplate> <DataTemplate> <Grid VerticalAlignment="Center"> <TextBox Text="{Binding Isbn, Mode=TwoWay}" /> </Grid> </DataTemplate> </c1FlexGrid:Column.CellEditingTemplate> </c1FlexGrid:Column> ……省略…… </c1FlexGrid:C1FlexGrid>
バインドする書籍データ
上のFlexGridコントロールにバインドしたいデータは、次のコードのような書籍のデータです(Books.csファイル)。BarCodeコントロールはチェックディジットを自動的に計算してくれるので、チェックディジット抜きのISBNを返すIsbnWithoutCheckDigit
プロパティも作ってあります(上のXAMLでBarCodeコントロールにバインドしています)。
// 書籍 public class Book { public string Title { get; set; } // 書籍のタイトル public string Isbn { get; set; } // ISBNコード(13桁、ハイフン無し) public string Price { get; set; } // 価格 // ISBNコードから末尾のチェックディジットを抜いたもの public string IsbnWithoutCheckDigit => (Isbn?.Length > 12) ? Isbn.Substring(0, 12) : Isbn; public Book(string title, string isbn, string price) { this.Title = title; this.Isbn = isbn; this.Price = price; } } // 書籍のデータストア public class Books { private static List<Book> _books; public static IList<Book> GetData() { if (_books == null) // ……省略…… return _books; } }
実際に使うときは、上のコードのBooks.GetData
メソッドを呼び出してIList<Book>
コレクションを取得し、それをFlexGridコントロールに与えます。
なお、これはサンプルということで上のコードの省略した部分でデータをハードコーディングしていますが、実際のアプリではWebサービスなどからデータを取得してくることになるでしょう。
データを表示する
上のデータを、次のコードのようにして画面が表示されるときにFlexGridコントロールのItemsSource
プロパティにセットします(MainPage.xaml.csファイル)。
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); this.flexgrid1.ItemsSource = Books.GetData(); }
これで、次の画像のようにグリッドの中にバーコードが表示されます。FlexGridコントロールの特徴として、ヘッダーをクリックするとソートされます(画像は書名順にソートしたところ)。また、CellEditingTemplate
が定義してあると、セルのダブルクリックで編集モードに切り替わります。なお、画像に見える[Excel出力]ボタン/[PDF出力]ボタンについては、後ほど解説します。