2012-07-11 20 views
0

我有一個datagrid,我使用的是foreach(DataGridRow gvr in myDataGrid),我需要能夠從行中的特定單元格獲取信息並將它們放入它們各自的類中屬性即(a.MessageName = gvr.column [「MessageName」] .value.ToString())。但我還沒有想出如何獲得基於該列的信息。以下是我迄今爲止...如何訪問datagridrow中的特定單元wpf C#

foreach (DataGridRow gvr in dgAnnouncement.Items) 
    { 
     Announcement a = new Announcement(); 

     a.MessageName = gvr.Column["MessageName"].Value.ToString(); 
     a.Message = gvr.Column["Message"].Value.ToString(); 
    } 

這是我的XAML ...

<DataGrid AutoGenerateColumns="False" Height="631" ItemsSource="{Binding}" HorizontalAlignment="Left" SelectionMode="Single" SelectionUnit="FullRow" Margin="12,124,0,0" Name="dgAnnouncement" VerticalAlignment="Top" Width="976" > 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="MessageName"></DataGridTextColumn> 
         <DataGridTextColumn Header="Message"></DataGridTextColumn> 
        </DataGrid.Columns> 
       </DataGrid> 

在網上搜索我仍然還沒有發現,我事先的任何工作這麼感謝的解決方案後,幫幫我。

+0

考慮使用綁定嗎?你已經有了一個itemssource--爲什麼不通過itemssource而不是行呢?用戶必須填寫哪些列? – Charleh 2012-07-11 14:39:50

+0

只是好奇,網格綁定到什麼地方?看起來你的列沒有任何綁定表達式 - 目標和源數據是什麼? – Charleh 2012-07-11 14:42:56

+0

說實話,這是我與WPF的第一次經歷,所以我不知道如何使用ItemSource或者通過它來瀏覽...這些列是用戶填寫的 – user1518038 2012-07-11 15:10:51

回答

0

好了,所以這聽起來像你想擁有的物品的綁定列表,如果你想這樣做,用戶可以在

增加和填充的值,最好的辦法是通過你的列綁定:

<DataGrid AutoGenerateColumns="False" Height="631" ItemsSource="{Binding}" HorizontalAlignment="Left" SelectionMode="Single" SelectionUnit="FullRow" Margin="12,124,0,0" Name="dgAnnouncement" VerticalAlignment="Top" Width="976" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="MessageName" Binding="{Binding MessageName, Mode=TwoWay}"></DataGridTextColumn> 
     <DataGridTextColumn Header="Message" Binding="{Binding Message, Mode=TwoWay}"></DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

問題是 - 你有什麼ItemsSource設置在此刻?

理想情況下,這應該是一個強類型集合Appointment對象(ObservableCollection<Appointment>也許)。你想讓用戶能夠添加新行嗎?如果是這樣,你需要提供一個按鈕,在源集合上執行Add或讓數據網格執行它(我認爲它支持'空行',您可以鍵入值...雖然我通常使用Telerik的RadGridView)。通常,當你有一個用戶添加一個新值的空行的網格時,網格將查看綁定的底層集合,並調用適當的方法來添加一個項目。如果此集合不支持Add方法(例如IBindingList),我認爲默認情況下是使用該類型的無參數構造函數創建一個新項目(對此不太確定,可能值得做一些閱讀)

基本上,通過綁定這些屬性TwoWay這意味着列表中的每個項目都可以由用戶直接在網格中進行編輯。如果用戶更改屬性,則基礎對象上的該屬性將受到影響*。這意味着你不需要編寫任何代碼來完成這一切。綁定也可以通過control-> control完成,例如,您可以將另一個網格ItemsSource綁定到第一個網格上的SelectedItems屬性,並且它會自動更新您選擇的項目。

上綁定這裏看看我的答案爲更多信息

How does data binding work?

編輯:

  • 我想補充一點,而不通過網格去任何改變底層對象仍然會顯示出來在網格中,但只有當對象實現屬性更改通知機制,例如INotifyPropertyChanged(在System.ComponentModel命名空間中)
相關問題