如何从DataView获取值?

时间:2016-06-26 15:22:57

标签: c# wpf data-binding datagrid dataview

当用户单击TreeView中的元素时,将触发此功能:

  private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        Vozlisce v = (Vozlisce)treeView.SelectedItem;      
        v.tabela.pretvoriListVDataTable(); 
        seznam.ItemsSource = v.tabela.dt.DefaultView; 
    }

它将类型为ObservableCollection<Vozlisce>的dt中的元素复制到具有xaml的自定义数据网格:

 <DataGrid x:Name="seznam" Margin="516,64,131.2,35.4" ItemsSource="{Binding DataSource}"  AlternatingRowBackground="Gainsboro"  AlternationCount="2" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTemplateColumn  Header="name" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBox Text="{Binding ime}"/>

                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn  Header="value" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBox Text="{Binding utez}"/>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>

    </DataGrid>

seznam.ItemsSource = v.tabela.dt.DefaultView;

我的问题是当我尝试从用户单击保存按钮时从DataGrid获取数据时,它不会从数据网格中获取当前更改的数据,它会复制我在开头时放入的相同数据seznam.ItemsSource = v.tabela.dt.DefaultView;

保存按钮功能:

     private void btnShraniUtezi_Click(object sender, RoutedEventArgs e)
    {         
        DataView dataView = (DataView)seznam.ItemsSource;

        DataTable dt = dataView.ToTable();

        //test
        double val = dt.Rows[1].Field<double>("utez");
        MessageBox.Show(val.ToString());

    }

如何从DataGrid获取当前更改的数据? 我正在使用WPF。

1 个答案:

答案 0 :(得分:0)

您在说明中说明了此行“seznam.ItemsSource = v.tabela.dt.DefaultView;” - 您是在后面的某些代码或viewmodel设置中执行此操作吗?如果是这样,那么您将破坏绑定到您在xaml中声明的属性“DataSource”。那是你的意图吗?

你对ime和utez的绑定是双向的,所以任何尝试写入数据网格中的那些位置都应该通过在viewmodel中对该属性放置断点来捕获,并且你可能能够更好地了解发生了什么,或者更确切地说是什么不发生。