程序发布后,列表框不会显示更新的数据库信息

时间:2013-03-25 03:20:05

标签: wpf data-binding listbox

我是编程的初学者,我正在尝试创建一个跟踪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();

再次,当我在视觉工作室并且我运行程序时,这一切都按预期工作。发布后,列表框将仅显示当前会话中的数据,甚至是正在更新的实际数据库文件。也许我这样做错了?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

很难说,但我对这一行感到有点困惑:

string myConnectionString = @"Data Source=C:\Users\zfam\My   Projects\programming\visual studio\XTrakker\XTrakker\runData.sdf";

看起来您对数据源提供商进行了硬编码。您确定在Visual Studio中使用相同的数据源吗?当您发布应用程序时?

也许在每次执行时都会重新创建数据源,这可以解释为什么你总是有新数据。