前提・実現したいこと
データテーブルに行を追加したい。
発生している問題・エラーメッセージ
objDataTable.Rows.Add(objRow);
でテーブルにRowDataを追加したいのだが、1列目にしかデータが入らない。
System.Windows.Data Error: 40 : BindingExpression path error:
該当のソースコード
C#
1 public void InitializeView() 2 { 3 DataTable objDataTable = new DataTable("Table"); 4 Module objModule = (Module)((MainView)this.Owner).ModuleList[Config.GetInstance().MEASUREMENT_MODE]; 5 MethodInfo mi = objModule.ModuleType.GetMethod("GetConfig", Type.EmptyTypes); 6 object objConfigResult = mi.Invoke(objModule.ModuleConstructorObject, null); 7 SortedList<int, KeyValuePair<string, string>> lstConfigResult = (SortedList<int, KeyValuePair<string, string>>)objConfigResult; 8 KeyValuePair<string, string> kvConfigResult; 9 for (int intIndex = 0; intIndex < lstConfigResult.Count; intIndex++) 10 { 11 kvConfigResult = lstConfigResult[intIndex]; 12 objDataTable.Columns.Add(kvConfigResult.Key); 13 } 14 15 mi = objModule.ModuleType.GetMethod("GetMeasurementResult", Type.EmptyTypes); 16 List<List<string>> lstMeasurementResult = (List<List<string>>)mi.Invoke(objModule.ModuleConstructorObject, null); 17 foreach (List<string> lstResult in lstMeasurementResult) 18 { 19 DataRow objRow = objDataTable.NewRow(); 20 int intIndex = 0; 21 foreach (string strResult in lstResult) 22 { 23 string strData = strResult.Remove(0, strResult.IndexOf(':') + 1); 24 objRow[objDataTable.Columns[intIndex].ColumnName] = strData; 25 intIndex++; 26 } 27 objDataTable.Rows.Add(objRow); 28 } 29 this.DataContext = objDataTable; 30 } 31 32
xaml
1 <!--設定内容--> 2 <Grid> 3 <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True" /> 4 </Grid> 5
自分でもよくわかっていないです。すみません。
質問に書いてあるだけの情報でズバリ回答できる人がいたらエスパーではないかと思ってしまうレベルの質問だと思います。
すみませんでした。
すみませんとかいう必要はないです。 https://teratail.com/help/question-tips にも書いてありますが、何が分からないかを書いていただきたく。
わからないことがわかってない状態なんですよね。。。
申し訳ないです。
そもそも何をしようとしてこのコード組んでるんですか?
計算結果を表示したいんですよね。
受け取る値にナンバーと計測結果が入っていてそれを表で表示したかったんです。
なるほど…。
WPFかUWPかわかりませんが、リフレクションを多用したり今どきDataTable(かなり古い技術です)を使ったりとかなりカオスな感じがするので、どうも完全にアプローチが間違っているような気がしますが…。
単純に適当なコレクションオブジェクトに格納にてバインドすればいいと思います。(UWPやWPFのチュートリアル的なものを一通りやればわかると思います)
datatableって古いんですね…
ありがとうございます。
他のやり方でアプローチしてみます
行の追加はできているが、一行目になってしまう (質問には「一列目」と書いてあるが間違い?)。それを最終行にしたいと言うことですか?
WPF とか DataTable にこだわりはなくて、データを表に表示できさえすれば (例えば List<T> 型のデータを Windows Forms アプリの DataGridView に表示) 目的は果たせるのでしょうか?
コードの入手先を書いてください。必ずです。
もう一度言いましょう。必ずです。
あなたが作ったものではありませんよね?
入手先を書くもう一つの理由は、それによってコードの目的がわかることです。
もう一度言います。コードを引用するときは入手先を必ず書いてください。書かなくていいのは自分で書いた時だけです。
各行の1列目しか追加できない。という意味です。
DataGridView使ってやってみます。ありがとうございます。
下記サイトを参考にしました。
https://www.development-notes.temochic.com/202/
https://qiita.com/tizonaColada_99/items/9212d35722af3bd5bc9f
https://yone64.wordpress.com/2014/12/04/datagrid%E3%81%A8datatable%E3%80%90wpf%E7%B7%A8%E3%80%91/
その三つを見てこのコードになりますか?
もっと高度なことをしていますが、それが自分でできる人の質問には見えません。
別dllからデータを取得するところは先輩に教えていただいたので参考サイト無いです。すみません。
その先輩に質問する方が早いのではないですか?
何がしたいのかも、どのような条件があるのかも、まったくわかりません。
今ある情報は「データテーブルに行を追加したい」という非常におおざっぱなものだけで、その下のコードはその目的に合致しない、つまり関係ないものということですよね?
先輩からの連絡待ち中に質問してみたんですよね。明日辺りには返信来ると思います。
質問の仕方含めて次回以降見直します。
> 先輩からの連絡待ち中に質問してみたんですよね。
それはここの回答者に対して大変失礼な話と思いませんか? それが認識できないような方はここのような場所に参加しないでいただきたいです。