我是编程的初学者,我正在尝试创建一个跟踪WPF中的慢跑数据的程序。我设置了一个列表框,它与我的紧凑sql数据库进行数据绑定,我的信息记录在该数据库中。当我在视觉工作室时,它可以正常工作,但是当我发布程序时,列表框将不再显示数据库中的正确信息。每次我开始新的课程时,它都会重新开始。我知道信息在数据库中,因为我有图表可以正确显示所有最新的记录数据。但是,列表框仅显示当前会话期间记录的数据。当我关闭程序并重新打开时,我上次会话中的数据不再显示在列表框中。
我的代码如下所示:
runDataDataSet1 ds;
runDataDataSet1TableAdapters.runDataTableTableAdapter dt;
weightDataSet wds;
weightDataSetTableAdapters.weightTableTableAdapter wdt;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ds = ((runDataDataSet1)(this.FindResource("runDataDataSet1")));
dt = new runDataDataSet1TableAdapters.runDataTableTableAdapter();
dt.Fill(ds.runDataTable);
CollectionViewSource cvs = ((CollectionViewSource)(this.FindResource("runDataTableViewSource")));
cvs.View.MoveCurrentToFirst();
wds = ((weightDataSet)(this.FindResource("weightDataSet")));
wdt = new weightDataSetTableAdapters.weightTableTableAdapter();
wdt.Fill(wds.weightTable);
CollectionViewSource wcvs = ((CollectionViewSource)(this.FindResource("weightTableViewSource")));
wcvs.View.MoveCurrentToFirst();
要提交数据,我在推送提交按钮时有此代码:
double pace = runData.runPace(runData.milesRun, runData.timeRun);
double pace2 = Math.Round(pace, 1);
double milesDuration = Math.Round((runData.mileDuration(runData.milesRun, runData.timeRun)), 1);
paceTextBox.Text = ((milesDuration) + " min mile");
//UPDATE DATABASE
string myConnectionString = @"Data Source=C:\Users\zfam\My Projects\programming\visual studio\XTrakker\XTrakker\runData.sdf";
string mySelectQuery = "SELECT [int], [runDate], [runDist], [runTime], [runPace] FROM [runDataTable] order by [int] desc";
DataRow dr = ds.Tables["runDataTable"].NewRow();
SqlCeDataAdapter adapter = new SqlCeDataAdapter(mySelectQuery, myConnectionString);
dr["runDate"] = date;
dr["runDist"] = distData;
dr["runTime"] = timeData;
dr["runPace"] = milesDuration;
ds.Tables["runDataTable"].Rows.Add(dr);
SqlCeCommandBuilder projectBuilder = new SqlCeCommandBuilder(adapter);
DataSet newSet = ds.GetChanges(DataRowState.Added);
adapter.Update(newSet, "runDataTable");
adapter.Dispose();
再次,当我在视觉工作室并且我运行程序时,这一切都按预期工作。发布后,列表框将仅显示当前会话中的数据,甚至是正在更新的实际数据库文件。也许我这样做错了?有什么想法吗?
答案 0 :(得分:0)
很难说,但我对这一行感到有点困惑:
string myConnectionString = @"Data Source=C:\Users\zfam\My Projects\programming\visual studio\XTrakker\XTrakker\runData.sdf";
看起来您对数据源提供商进行了硬编码。您确定在Visual Studio中使用相同的数据源吗?当您发布应用程序时?
也许在每次执行时都会重新创建数据源,这可以解释为什么你总是有新数据。