代码之家  ›  专栏  ›  技术社区  ›  Mosa

我无法使用实体框架绑定数据网格

  •  0
  • Mosa  · 技术社区  · 7 年前

    我试图使用WPF上的实体框架以两种方式绑定数据网格。我无法使用数据网格添加任何内容 按save后,所有数据将消失,并且不会保存在数据库中

    <Grid>
        <DataGrid AutoGenerateColumns="True" x:Name="Datag" HorizontalAlignment="Left" Margin="180,24,0,0"  VerticalAlignment="Top" Height="200" Width="551">         
            <DataGrid.Columns>
                <DataGridTextColumn   Width="100" Binding="{Binding id, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <DataGridTextColumn  Width="100" Binding="{Binding names, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <DataGridTextColumn  Width="100" Binding="{Binding number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </DataGrid.Columns>      
        </DataGrid>
    </Grid>
    

    这是我的代码:

    testsEntities db = new testsEntities();
    
     public MainWindow()
     {
         InitializeComponent();
         Datag.ItemsSource = db.Test_table.ToList();         
     }
    
     private void save(object sender, RoutedEventArgs e)
     {
         Datag.Items.Refresh();
         db.SaveChanges();
     }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Celso Lívero    7 年前

    好的,最后一次编辑。

    看起来你的方法几乎是对的,它使用的是绑定( Binding id, ... )在datagrid中,但它似乎没有使用viewmodel(您的保存是代码隐藏中的事件) save(object sender, RoutedEventArgs e) )

    我将直接从数据网格中获取数据,如果它不为null,我将处理它并使用实体框架编写它

    private void save(object sender, RoutedEventArgs e)
    {
        try
        {
    
            using (var db = new testsEntities())
            {
                if (Datag.ItemsSource == null) 
                    return; //Or throw
                var listOfItems = (IEnumerable<Test_table>)Datag.ItemsSource;
                foreach(var item in listOfItems)
                {
                    var model = db.Test_table.FirstOrDefault(x=>x.Id == item.Id)
                    if (model?.Id > 0)
                    {
                        model.names = item.names;
                        model.number = item.number;
                        db.Entry(model).State = EntityState.Modified;
                    }
                    else
                        db.Test_table.Add(item);
    
                    db.SaveChanges();
                }
    
            }
        }
        catch (Exception e)
        {
             //Do Something
        }
    }