質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3415閲覧

DataTableがバインドされているDataGridでセルの入力値チェックを行う方法

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/09/04 11:15

前提・実現したいこと

DataTableがバインドされているMatrixな入力をするDataGridで数値以外が入力された際に
エラー表示をするにはどのようにすれば良いでしょうか。
※行数、列数はBindされるデータにより変化する事を想定しています。

以下の様なMatrixで「a」を入力した際にセルを赤枠で表示したい
イメージ説明

ViewModel

1public class MainWindowViewModel : BindableBase 2{ 3 public DataTable DetailData { get; set; } 4 5 public MainWindowViewModel() 6 { 7 this.DetailData = this.GetData(); 8 } 9 10 private DataTable GetData() 11 { 12 var dt = new DataTable(); 13 dt.Columns.Add("Color"); 14 dt.Columns.Add("Size1"); 15 dt.Columns.Add("Size2"); 16 dt.Columns.Add("Size3"); 17 18 var dr = dt.NewRow(); 19 dr[0] = "レッド"; 20 dt.Rows.Add(dr); 21 22 23 var dr1 = dt.NewRow(); 24 dr1[0] = "ブルー"; 25 dt.Rows.Add(dr1); 26 27 28 var dr2 = dt.NewRow(); 29 dr2[0] = "イエロー"; 30 dt.Rows.Add(dr2); 31 32 return dt; 33 } 34} 35

XAML

1<Window x:Class="BlankApp1.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 Width="525" 6 Height="350" 7 prism:ViewModelLocator.AutoWireViewModel="True"> 8 <Grid> 9 <DataGrid CanUserAddRows="False" 10 CanUserDeleteRows="False" 11 CanUserSortColumns="False" 12 FontSize="14" 13 GridLinesVisibility="All" 14 HorizontalGridLinesBrush="LightGray" 15 ItemsSource="{Binding DetailData}" 16 RowHeight="21" 17 SelectionMode="Single" 18 SelectionUnit="Cell" 19 VerticalGridLinesBrush="LightGray" /> 20 </Grid> 21</Window>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

投稿2018/09/04 11:28

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/07 03:01

ご回答ありがとうございます。 教えていただいたページを元に色々やってみたのですが なかなかやりたいことができません。 バインドで列数・行数が変わるので「AutoGenerateColumns="True"」になり 固定で列へのValidationRuleが設定できない? なので、行に対してValidationRuleを設定するしかない? 以下ValidateメソッドのvalueにDataRowの値が入っているので、そこから 行内の値は取得できるのでチェックは可能なのですが、行データ内のどの列が変更 されたかがわからないので、行内の全ての値に対してチェックをするしかない? public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) セルに対してValidationRuleを設定する方法も調べてみたのですが見つかりませんでした。 セル単位でValidationRuleを設定する方法ってあるのでしょうか???
Zuishin

2018/09/07 03:06

すべてのセルで同じバリデーションをするならバインド後にすべての列にルールを適用すればいいと思います。
退会済みユーザー

退会済みユーザー

2018/09/07 03:12

そういう記述が可能なんですね、、、 お手数ですが、もしよろしければ具体的にXAMLにどういった記述をすれば良いかをキーワードだけでもご提示いただけないでしょうか。
退会済みユーザー

退会済みユーザー

2018/09/10 21:03

なるほど、C#側で実装できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問