【问题标题】:Listbox won't display updated database info once program is published一旦程序发布,列表框将不会显示更新的数据库信息
【发布时间】:2013-03-25 03:20:04
【问题描述】:

我是编程的初学者,我正在尝试制作一个程序来跟踪我在 WPF 中的慢跑数据。我设置了一个列表框,该列表框与我的紧凑型 sql 数据库进行数据绑定,我的信息被记录到该数据库中。当我在 Visual Studio 中时,它可以正常工作,但是当我发布程序时,列表框将不再显示来自数据库的正确信息。每次我开始新的程序会话时,它都会重新开始。我知道该信息在数据库中,因为我有可以正确显示所有最新记录数据的图表。但是,列表框将仅显示在当前会话期间记录的数据。当我关闭程序并重新打开时,我之前会话的数据不再显示在列表框中。

我的代码如下所示:

    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();

同样,当我在 Visual Studio 中运行程序时,这一切都正常运行。一旦我发布,列表框将只显示当前会话中的数据,甚至正在更新实际的数据库文件。也许我做错了?有什么想法吗?

【问题讨论】:

    标签: wpf data-binding listbox


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      相关资源
      最近更新 更多