我有一个小程序,用于检查进出。
DB在SQL Azure中
问题在于,当我整个过程中编辑数据杂志和选项卡以激活roweditending时,抓取的数据似乎是我的旧数据,而不是我的新数据。这只是最奇怪的事情。
这是我的XAML:
<Window x:Class="CreditCardTracker.CheckIn"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CreditCardTracker"
xmlns:dblocal ="clr-namespace:CreditCardTracker.dbml"
mc:Ignorable="d"
Title="Check In" Height="378.534" Width="707.978">
<Grid>
<DataGrid x:Name="dg_cct" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="297" Width="683" AutoGenerateColumns="False" RowEditEnding="dg_cct_RowEditEnding" Loaded="dg_cct_Loaded">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Header="ID" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding CCT_PersonBorrowing}" Header="Borrower" />
<DataGridTextColumn Binding="{Binding CCT_CardType}" Header="Card Type" />
<DataGridTemplateColumn Header="Check Out">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding CCT_CheckOutDateTime}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding CCT_Vendor}" Header="Vendor" />
<DataGridTextColumn Binding="{Binding CCT_Amount}" Header="Amount" />
<DataGridTemplateColumn Header="Check In">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding CCT_CheckInDateTime}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
这是代码:
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Data.Linq;
namespace CreditCardTracker
{
/// <summary>
/// Interaction logic for CheckIn.xaml
/// </summary>
public partial class CheckIn : Window
{
public CheckIn()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(dg_cct_Loaded);
}
public void LoadTable()
{
dbml.creditCardTableDataContext dc = new dbml.creditCardTableDataContext();
var q = from p in dc.CreditCardTrackers
where p.CCT_CheckInDateTime == null
select p;
dg_cct.ItemsSource = q.ToList();
}
private void dg_cct_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
dbml.creditCardTableDataContext context = new dbml.creditCardTableDataContext();
dbml.CreditCardTracker borrowerRow = e.Row.DataContext as dbml.CreditCardTracker;
int m = borrowerRow.Id;
//MessageBox.Show(m.ToString());
var borrower = (from p in context.GetTable<dbml.CreditCardTracker>()
where p.Id == m
select p).SingleOrDefault();
MessageBox.Show("Amount is " + borrowerRow.Id);
borrower.CCT_Amount = borrowerRow.CCT_Amount;
borrower.CCT_CardType = borrowerRow.CCT_CardType;
borrower.CCT_CheckInDateTime = borrowerRow.CCT_CheckInDateTime;
borrower.CCT_CheckOutDateTime = borrowerRow.CCT_CheckOutDateTime;
borrower.CCT_PersonBorrowing = borrowerRow.CCT_PersonBorrowing;
borrower.CCT_Vendor = borrowerRow.CCT_Vendor;
context.SubmitChanges();
MessageBox.Show("Updated successfully.");
LoadTable();
}
}
private void dg_cct_Loaded(object sender, RoutedEventArgs e)
{
dbml.creditCardTableDataContext dc = new dbml.creditCardTableDataContext();
var q = from p in dc.CreditCardTrackers
where p.CCT_CheckInDateTime == null
select p;
dg_cct.ItemsSource = q.ToList();
}
}
}
这一点代码:
dbml.CreditCardTracker borrowerRow = e.Row.DataContext as dbml.CreditCardTracker;
应该给我更新的号码(我输入到数据杂志的号码(,但它给了我旧的数字。运行时,我可以在消息框中看到它:
MessageBox.Show("Amount is " + borrowerRow.Id);
真的很奇怪。我经过了多个教程,但似乎没有任何作用。任何帮助都会很棒。
谢谢。
ahh ..我发现了它。
我从此链接找到了它:
https://social.msdn.microsoft.com/forums/vstudio/en-us/c38fc695-d1ec-4252-4252-87b7b484ee01e4/wpf-4-datagrid-rowed-ramp.
WPF 4中的DataGrid控件与WPFToolKit中的DataGrid有些不同。默认情况下,它在选择行更改后更新数据,因此我们无法在RowedItending事件中获得新值。例如,我们可以通过设置绑定的updateSourCetrigger来解决此问题,例如,我们可以将updateRateSourCetrigger设置为属性交换,以便WEN可以在RowedItending事件中获取新值。
某些内容喜欢以下内容:
<DataGrid AutoGenerateColumns="False" Name="datagrid" ItemsSource="{Binding}" RowEditEnding="datagrid_RowEditEnding">