/ 53
.NET Standard で
DataTable が使えるらしい
ので試してみた
1
城東.NET #22
2018年07月25日
石崎 充良
/ 53
自己紹介
石崎 充良 ( @mishi_cs )
Japan Xamarin Users Group ( JXUG )
Microsoft MVP for Visual Studio and Development Technologies
言語: C# XAML
活動:
・JXUG (もくもく会) (connpass)
・城東.NET Users Group (connpass)
・C# もくもく会 (connpass)
※主に秋葉原
2
/ 53
[1ページでわかる]
Xamarinの概要
3
/ 53
Xamarin とは
・クロスプラットフォーム
・ネイティブアプリ
・(Android ・iOS) のAPI カバー率 100 %
・C# / .NET / Visual Studio
・クロスプラットフォームでコードを共通化する
4
/ 53
[再放送]
Xamarinの概要
5
/ 53
Xamarin とは
・Android / iOS の API を C# から使えるようにしたもの
・C# (.NET) のライブラリを使えるようにしたもの
6
ロジックのみ共通化
UIはネイティブで個別に作りこむ
Shared C# App Logic
(.NET Standard)
iOS
C# UI
Android
C# UI
Windows
C# UI
/ 53
Xamarin の2つの開発方法
7
Xamarin Native Xamarin Forms
ロジックのみ共通化
UIはネイティブで個別に作りこむ
ロジックとUIを共通化
UIは各プラットフォームの
同じ役割のUIが自動マッピング
Shared C# App Logic
(.NET Standard)
iOS
C# UI
Android
C# UI
Windows
C# UI
Shared C# App Logic
(.NET Standard)
Shared C# UI Code
(Xamarin.Forms)
/ 53
ネイティブの UI
8
/ 53
UI の開発手法
9
Xamarin.Native Xamarin.Forms
概要 ネイティブの技術を使用 UI 共通化ライブラリ
定義 Android では axml
iOS では storyboard など
xaml というシンプルな XML
制約 制限のない UI 各プラットフォームの最大公約数の機能
のみ
特徴 UI が共通化できない UI にこだわらないアプリなら UI まで共
通化可能
使いどころ コンシューマー向けアプリやデザ
インを重視する場合に
ビジネス向けアプリや機能重視のツール
系アプリなどに
Formsで細
かくUIを定
義したい
Custom Renderer で独自にネイティブの
コントロール/プロパティと結合するコン
トロールを作成可能
/ 53
Xamarin.Forms.WPF
10
/ 53
JXUG いつものハンズオン
11https://github.com/chomado/xamarin-dev-doc/blob/master/hands-on/readme.md
/ 53
比較
12
Android WPF
/ 53
比較
13
Android WPF
/ 53
比較
14
Android WPF
完全に一致
/ 53
ただし
15
未実装
(ビルドできるようにしてくれたことは助かる)
※簡単な実装で回避可能(WPFの時は無効にするなど)
何も起きない、エラーにもならない
(ビルドできるようにしてくれたことは助かる)
※簡単な実装の様に思えるがなぜ?
/ 53
とりあえず
• 未実装になる点はあるが、おおむね OK
16
/ 53
DataTable
17
/ 53
DataTable
18https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datatable?view=netstandard-2.0
/ 53
素のWPF
19
DataBase
Application View
画面定義
/ 53
コードビハンド
20
コードビハインド
/ 53
動作
21
DataBase
Application View
XAML
Data Binding
/ 53
Xamarin.Forms.WPF
22
/ 53
こうなってほしい
23
Application ViewXAML
/ 53
コードビハインド
24
コードビハインド
DataContext -> BindingContext
/ 5325
Exception
/ 53
解決策
26
NuGet
/ 53
実行
27
Application Viewコードビハインド
/ 53
実行
28
Application Viewコードビハインド
白い!
/ 53
List<DataRow>
29
Application Viewコードビハインド
List<DataRow>
/ 53
List<DataRow>
30
Application Viewコードビハインド
List<DataRow>
「 , 」 だけ!
/ 53
Model Class
31
コードビハインド
Model Class
/ 53
Model Class
32
コードビハインド
Model Class
表示された!
/ 53
DataBinding
33
コードビハインド
Model Class
DataBinding
ダメです!
/ 53
とはいえ
とりあえず
クエリの発行とデータの読み取りは可能
34
/ 53
Xamarin.Forms.UWP
35
/ 53
素のDataTable
36
Application Viewコードビハインド
白い!
/ 53
Model Class
37
コードビハインド
Model Class
表示された!
/ 53
Model Class
38
コードビハインド
Model Class
DataBinding
やっぱりダメです!
/ 53
とはいえ
とりあえず
クエリの発行とデータの読み取りは可能
39
/ 53
Xamarin.Forms
.Android
40
/ 53
接続失敗
41
タイムアウト!
/ 53
対策(エミュレータの場合)
42
タイムアウト!
1.SQLServer 用にポートの開放(ホストPC)
2.接続先 IP アドレスを 10.0.2.2 ではなくホスト PC の
IP アドレスに(ソースコード)
/ 53
実行結果
43
Model Class素の DataTable
/ 53
実行結果
44
Model Class素の DataTable
DataBinding
やっぱりダメです!
/ 53
Xamarin.Forms.iOS
45
/ 53
接続失敗
46
エンコーディング 932 がない
/ 53
対策
47
エンコーディング 932 がない
cjk をチェック
/ 53
実行結果
48
Model Class素の DataTable
/ 53
実行結果
49
Model Class素の DataTable
DataBinding
やっぱりダメです!
/ 53
結果
50
/ 53
結果
プラットフォーム 接続 DataBinding
WPF 〇 ×
UWP 〇 ×
Android 〇 ×
iOS 〇 ×
51
/ 53
まとめ
52
/ 53
まとめ
・クエリの発行とデータの読み取りは可能
・皆の愛した DataTable はまだ生きている
53
/ 53
ありがとうございま
した!
54

DataTable