【解決方法】Datagrid WPF C# は、バインドせずにコードで入力し、実行時に編集可能


こんにちは、
人のデータを管理する WPF アプリがあります。 各人にはいくつかの属性と電話番号のリストがあります。 メイン ウィンドウには、ObservableCollection にバインドされた DataGrid があり、個々のプロパティはいくつかの DataGridTextColumn にあり、列には ComboBox があり、それぞれが各人の電話番号リストを表示します。 今では、すべてが完璧です。 私が欲しいのは、人のデータを編集するためにMenuItemをクリックすると(OKです)、子ウィンドウが開き、一部のTextBoxに人の個々の属性の現在の値があります(変更して保存できます)問題なし) と、データと電話番号を含む 2 つの列 (1 つまたは複数の行) と、行を削除するためのボタン (それで問題ありません) を含む 3 番目の列を表示する DataGrid です。 ここに私の問題があります。 私は、この DataGrid をプログラムで、コードによって、バインドせずに (必要ではありません)、入力して、その人の現在の電話番号リスト (行ごとに 2 つの文字列) を表示し、実行時に編集できるようにしたいと考えています (変更セルの値、行の追加、行の削除)、[OK]ボタンをクリックして、その個人の電話番号データ リスト (行の変更、追加、または削除) と個人の属性を更新します。 今までは、バインディングを使用して既存の行を編集することしかできませんでしたが、追加も削除もできませんでした。 データベースと ADO.NET を処理し、プログラム オブジェクトとデータを処理する方法は既に知っています。バインドせずに DataGrid にデータを入力する方法と実行時に編集する方法を知るだけで済みます。
あなたが私を助けてくれることを願っています。 これは思っているよりずっと簡単だと思います。
どうぞよろしくお願いいたします。
よろしく
パブロ

私が試したこと:

私は長い間検索しましたが、バインドを使用すると述べた投稿があり、それがなければ実行時に DataGrid を編集することは不可能でした。
私は例えば試しました:
foreach (person.Tels.PhoneNbrs 内の TelData データ)
dataGrid.Items.Add(データ);
行は正常に表示されましたが、編集できませんでした。
また、Item にアクセスして TelData オブジェクトをソース List に追加しようとした DataGrid RowEditEnding イベント (バインディングあり) の処理も試みました。
e.Row.Item
しかし、それは常にnullでした
そして、私もアクセスしてみました
dataGrid.SelectedItem
DeleteRow ボタンをテストするために、これも常に null でした。
確かに私はたくさん検索しましたが、興味深いことに、バインディングを使用すると、既存の行を編集できますが、例外をスローせずに追加または削除することはできません。

解決策 1

特に、観察可能なコレクションの操作方法をすでに知っているため、あなたの「欲求」は不合理です。 車輪なしで転がる車が欲しい。 実行できますが、ログが必要になります。

完了したら、監視可能なコレクションを破棄して、NOT バインディングのふりをします (誰にも言わないでください)。

解決策 2

これは、ほとんどの人が考えるよりも合法です。 FlowDocument を使用しようとすると、私が知る限りバインディングが許可されません。 バインドは WPF (およびすべての新しいテクノロジ) にとって非常に重要であるため、これは本当に残念です。 ユーザーコントロールを作成し、テキストと画像と…プロパティ(値)を設定するだけでバインディングがない場所にそれらを挿入できます。 非常に優れたデータグリッドをいくつか作成しましたが、それらをユーザー コントロール リストの一部として出力できません。 itemssource も datacontext ルートも機能しません。 items.add を試しても運がなかった。 これに対処しようとする多くの記事を見てきましたが、多くの記事を試してみましたが、うまくいきませんでした。 独自の印刷から紙への印刷を時間通りに開発するには、非常にコストがかかります (サードパーティの解決策には常に料金がかかります)。 私は DocumentViewer のような WPF 印刷が大好きです。 Flow…Viewer は機能しますが、FlowDocument をサポートしていません。ほとんどの場合、印刷されたページに何かを追加するだけで、サイズが事前にわからないため、FlowDocument は Stack コントロールを模倣するのに最適ですが、印刷されたページと複数のページ。 いつか試してみて、同じページで複数のユーザーコントロールを使用して FlowDocument をデータグリッドで動作させることができるかどうかを確認してください。

コメント

タイトルとURLをコピーしました