0

我有一个数据网格,我在其中使用 foreach(DataGridRow gvr in myDataGrid),我需要能够从行中的特定单元格中获取信息并将它们放入各自的类属性中,即(a.MessageName = gvr.column [" 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>

在网上搜索后,我仍然没有找到适合我的解决方案,因此在此先感谢您的帮助。

4

1 回答 1

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属性,它会自动更新您选择的项目。

在此处查看我的答案以获取有关 DataBinding 的更多信息

数据绑定如何工作?

编辑:

  • 我可能会补充一点,对底层对象的任何更改而不通过网格仍将显示在网格中,但前提是对象实现了属性更改通知机制,例如INotifyPropertyChanged(在 System.ComponentModel 命名空间中)
于 2012-07-11T15:29:52.737 回答