私はWPF DataGrid
での作業Mと私はcolumn
とrow
インデックスを使用してDataGridCell
の値を取得したい:私は何ができるか、すべてはこれですが、それはうまくいきませんでした:セルまたはそれぞれの行を選択せずにwpfデータグリッドから特定のセル値を取得する方法はありますか?
myDatGrid.Columns[0].GetCellContent((DataGridRow)myDatGrid.Items[0]);
私はWPF DataGrid
での作業Mと私はcolumn
とrow
インデックスを使用してDataGridCell
の値を取得したい:私は何ができるか、すべてはこれですが、それはうまくいきませんでした:セルまたはそれぞれの行を選択せずにwpfデータグリッドから特定のセル値を取得する方法はありますか?
myDatGrid.Columns[0].GetCellContent((DataGridRow)myDatGrid.Items[0]);
あなたのセルの値は、指定された列がバインドされているものに依存することになります。 行がモデルのインスタンスになります。
DataGrid
にバインドしているPerson
クラスのコレクションがあるとします。
Person p = ((ContentPresenter)myDatGrid.Columns[0].GetCellContent(myDatGrid.Items[0])).Content;
Content
プロパティは行のための基礎となるモデルを返すために起こっています。特定のプロパティを取得したい場合は、INotifyPropertyChanged
を実装する必要があるunderylingオブジェクトに直接アクセスすることで、WinFormsアプリケーションと同様にDataGrid
を欺く必要はありません。
((ComboBox)(myDatGrid.Columns[0].GetCellContent(
(TestData)myDatGrid.Items[0]))).SelectedValue.ToString());
今では動作します:
はOK、私はそれを得たと思う、私は私が使用している列がDataGridComboBoxColumn
あるので、私はこれを行う実際にする必要があり、私は入れなければならないいくつかのキャストを逃しました。
私は上に提案されたことを試してみましたが、うまくいきませんでした。
ComboBoxをバインドして最初に読み込んだときにWPF Datagridで正しい値を選択しようと1日苦労していましたので、ここで私の解決策を共有すると思いました。 VBについては申し訳ありませんが、コンセプトはC#でも動作するはずです。
最初にグリッドが読み込まれたときに値が入力されて選択されるようにする場合は、コードを正しいイベントハンドラに配置する必要があります。LayoutUpdated。他のイベントハンドラでは、GetCellContent関数はNothing(null)を返します。このコードは、Button.Clickイベントなど、後で発生するイベントを処理するイベントハンドラに配置することもできます(必要条件を満たす場合)。
第二に、コード:
For i As Int32 = 0 To DataGrid1.Items.Count - 1
Dim row As DataGridRow
row = DataGrid1.ItemContainerGenerator.ContainerFromItem(DataGrid1.Items(i))
If row IsNot Nothing AndAlso row.Item IsNot Nothing Then
Dim cp As ContentPresenter = DataGrid1.Columns(3).GetCellContent(DataGrid1.Items(i))
If cp IsNot Nothing AndAlso cp.ContentTemplate IsNot Nothing Then
Dim dt As DataTemplate = cp.ContentTemplate
If dt IsNot Nothing Then
Dim cb As ComboBox = dt.FindName("cbVendorNames", cp)
If cb IsNot Nothing Then
cb.ItemsSource = Vendors
cb.DisplayMemberPath = "VendorName"
cb.SelectedValuePath = "AS_ID"
cb.SelectedValue = "" ' set your selected value here
End If
End If
End If
End If
Next
このコードは、データグリッド内のすべての行から(a)のループ、(b)はこの場合は、選択したセルのためのContentPresenterを(取得である何、セル3)、(c)ContentPresenterのDataTemplateを取得し、(d)最後にComboBoxへの参照を取得します。これにより、ComboBoxを外部データソース(List(Of Vendor))にバインドし、値を選択することができました。誰かがより良い解決策を持っています。投稿してください。
列cuzを私は使用してM Iは本当にそれをapreciateあなたの助けのためのThxをアーロン、実際に私は私が入れなければならないいくつかのキャストを逃したと思いますが、私は実際にこれやったはずですDataGridComboBoxColumn です: ((コンボボックス)を( MyDatGrid.Items [0]))。)。SelectedValue.ToString()); MyDatGrid.Columns [0] .GetCellContent( (TestData)myDatGrid.Items [0])))。 今すぐ動作します –