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

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

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

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Q&A

解決済

1回答

7183閲覧

DataGridの変更内容を元ソースに反映させたい

kkg_No_05

総合スコア13

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

1グッド

0クリップ

投稿2020/04/24 04:12

編集2020/04/24 12:35

前提・実現したいこと

下記のコードでは、DataGridに表示、ボタン押下で再表示をしています。
(DataGridの値を変更しても、元に戻る)

これを修正して、DataGridの値の変更をソース配列に反映させる様な動作を実現したいです。
(DataGridの変更内容が残る形にしたい)

ご協力をお願い致します。

該当のソースコード

XAML

1<DataGrid x:Name="dataGrid" Margin="10" AutoGenerateColumns="False" SourceUpdated="DataGrid_SourceUpdated"> 2 <DataGrid.Columns> 3 <DataGridTextColumn Header="Name" Width="80" 4 Binding="{Binding Data_Name, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" /> 5 <DataGridTextColumn Header="Code" Width="100" 6 Binding="{Binding Data_Code, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" /> 7 <DataGridTextColumn Header="Enable" Width="*" 8 Binding="{Binding Data_Enable, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" /> 9 </DataGrid.Columns> 10</DataGrid> 11<Button Content="Button" HorizontalAlignment="Left" Margin="355,353,0,0" VerticalAlignment="Top" Width="75" Height="56" Click="Button_Click"/>

C#

1public ObservableCollection<DataGrid_Data> Source_DG = new ObservableCollection<DataGrid_Data>(); 2 3public string[] ItemNames = { "AAA", "BBB", "CCC", "DDD" }; 4public string[] ItemCodes = { "aaa", "bbb", "ccc", "ddd" }; 5public string[] ItemEnables = { "111", "222", "333", "444" }; 6 7public MainWindow() 8{ 9 InitializeComponent(); 10 11 for(int i = 0; i < ItemNames.Length; i++) 12 { 13 Source_DG.Add(new DataGrid_Data(ItemNames[i], ItemCodes[i], ItemEnables[i]) { }); 14 } 15 16 dataGrid.ItemsSource = Source_DG; 17} 18 19public class DataGrid_Data 20{ 21 public string Data_Name { get; set; } 22 public string Data_Code { get; set; } 23 public string Data_Enable { get; set; } 24 25 public DataGrid_Data(string Name, string Code, string Enable) 26 { 27 Data_Name = Name; 28 Data_Code = Code; 29 Data_Enable = Enable; 30 } 31 32} 33 34private void DataGrid_SourceUpdated(object sender, DataTransferEventArgs e) 35{ 36} 37 38private void Button_Click(object sender, RoutedEventArgs e) 39{ 40 Source_DG.Clear(); 41 42 for (int i = 0; i < ItemNames.Length; i++) 43 { 44 Source_DG.Add(new DataGrid_Data(ItemNames[i], ItemCodes[i], ItemEnables[i]) { }); 45 } 46 47 dataGrid.ItemsSource = Source_DG; 48}

前提・実現したいこと(追記)

上記のコードから、DataGridのソース元を配列から2次元Listに変更しました。

該当のソースコード

C#

1public ObservableCollection<DataGrid_Data> Source_DG = new ObservableCollection<DataGrid_Data>(); 2 3public List<List<string>> ItemNames = new List<List<string>>(); //リスト化 4public List<List<string>> ItemCodes = new List<List<string>>(); //リスト化 5public List<List<string>> ItemEnables = new List<List<string>>(); //リスト化 6 7 8public string[] str_ItemNames = { "AAA", "BBB", "CCC", "DDD" }; 9public string[] str_ItemCodes = { "aaa", "bbb", "ccc", "ddd" }; 10public string[] str_ItemEnables = { "111", "222", "333", "444" }; 11public string[] str_Dummys = { "0", "00", "000", "0000" }; 12 13public int group = 0; 14 15public MainWindow() 16{ 17 InitializeComponent(); 18 19 20 Init_ItemList(); 21 22 23 for (int i = 0; i < str_ItemCodes.Length; i++) 24 { 25 Source_DG.Add(new DataGrid_Data(ItemNames[group][i], ItemCodes[group][i], ItemEnables[group][i]) { }); 26 } 27 28 dataGrid.ItemsSource = Source_DG; 29} 30 31public void Init_ItemList() 32{ 33 for (int i = 0; i < 4; i++) 34 { 35 ItemNames.Add(new List<string>()); 36 ItemCodes.Add(new List<string>()); 37 ItemEnables.Add(new List<string>()); 38 } 39 40 ItemNames[group].AddRange(str_ItemNames); 41 ItemCodes[group].AddRange(str_ItemCodes); 42 ItemEnables[group].AddRange(str_ItemEnables); 43 44 ItemNames[group + 1].AddRange(str_Dummys); 45 ItemCodes[group + 1].AddRange(str_Dummys); 46 ItemEnables[group + 1].AddRange(str_Dummys); 47 48 ItemNames[group +2].AddRange(str_ItemNames); 49 ItemCodes[group +2].AddRange(str_ItemCodes); 50 ItemEnables[group +2].AddRange(str_ItemEnables); 51} 52 53 54public class DataGrid_Data 55{ 56 public string Data_Name { get; set; } 57 public string Data_Code { get; set; } 58 public string Data_Enable { get; set; } 59 60 public DataGrid_Data(string Name, string Code, string Enable) 61 { 62 Data_Name = Name; 63 Data_Code = Code; 64 Data_Enable = Enable; 65 } 66} 67 68private void Button1_Click(object sender, RoutedEventArgs e) 69{ 70 group = int.Parse(TextBox.Text); 71 72 Source_DG.Clear(); 73 74 for (int i = 0; i < str_ItemCodes.Length; i++) 75 { 76 Source_DG.Add(new DataGrid_Data(ItemNames[group][i], ItemCodes[group][i], ItemEnables[group][i]) { }); 77 } 78 79 dataGrid.ItemsSource = Source_DG; 80} 81 82private void Button2_Click(object sender, RoutedEventArgs e) 83{ 84 /* 85 ItemNames = Source_DG.Select(x => x.Data_Name).ToArray(); 86 ItemCodes = Source_DG.Select(x => x.Data_Code).ToArray(); 87 ItemEnables = Source_DG.Select(x => x.Data_Enable).ToArray(); 88 */ 89}
TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

こういうことですか?

cs

1private void Button_Click(object sender, RoutedEventArgs e) 2{ 3 ItemNames = Source_DG.Select(x => x.Data_Name).ToArray(); 4 ItemCodes = Source_DG.Select(x => x.Data_Code).ToArray(); 5 ItemEnables = Source_DG.Select(x => x.Data_Enable).ToArray(); 6}

赤線が出たらusing System.Linq;を上のほうに追加してください。


意図があっているのか自信ありませんが、こうですか?

cs

1private void Button1_Click(object sender, RoutedEventArgs e) 2{ 3 group = int.Parse(TextBox.Text); 4 5 ItemNames[group] = Source_DG.Select(x => x.Data_Name).ToList(); 6 ItemCodes[group] = Source_DG.Select(x => x.Data_Code).ToList(); 7 ItemEnables[group] = Source_DG.Select(x => x.Data_Enable).ToList(); 8}

投稿2020/04/24 08:53

編集2023/07/21 10:40
TN8001

総合スコア9862

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

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

kkg_No_05

2020/04/24 12:38

TN8001様 ご回答ありがとうございます。 思っていた様に配列を変更することができました。 大変申し訳ございませんが、質問に追記しました「2次元List」の場合についてもご協力いただけませんでしょうか?宜しくお願い致します。
kkg_No_05

2020/04/25 05:26

ご回答ありがとうございます。 無事に解決致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問