如何访问datagridrow中的特定单元格wpf C#

时间:2012-07-11 14:33:39

标签: c# wpfdatagrid

我有一个数据网格,我使用foreach(myDataGrid中的DataGridRow gvr),我需要能够从行中的特定单元格获取信息并将它们放入各自的类属性中,即(a.MessageName = gvr。柱[ “MessageName”]。value.ToString())。但我还没弄清楚如何根据专栏获取信息。这是我到目前为止所拥有的......

    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>

搜索网页后,我仍然没有找到适合我的解决方案,所以提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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或让数据网格执行它(我认为它支持空行&#39;您可以在其中键入值...虽然我通常使用Telerik的RadGridView)。通常,当您的网格具有空行以供用户添加新值时,网格将查看绑定的基础集合并调用适当的方法来添加项目。如果这个集合不支持Add方法(比如IBindingList那样),我认为默认是使用该类型的无参数构造函数创建一个新项目(对此不太确定,可能值得做一些阅读)

基本上,通过绑定这些属性TwoWay,这意味着用户可以直接在网格中编辑列表中的每个项目。如果用户更改了属性,则基础对象上的该属性将受到影响*。这意味着您不需要编写任何代码来连接这一切。绑定也可以通过control-&gt;控件完成,例如,您可以将另一个网格ItemsSource绑定到第一个网格上的SelectedItems属性,它将自动更新您选择的项目。< / p>

在此处查看我的答案,了解有关DataBinding的更多信息

How does data binding work?

编辑:

  • 我可能会补充说,如果不通过网格对底层对象进行的任何更改仍将显示在网格中,但前提是该对象实现了属性更改通知机制,例如INotifyPropertyChanged(在System.ComponentModel命名空间中)