关闭时保存应用程序数据

时间:2016-12-21 12:33:30

标签: c# wpf

我正在编写电话簿。它是完全编码的,我对结果非常满意(首次完成申请!)。这是一个用WPF编写的电话簿,我正在使用DataGrid来存储添加的人的值。问题是我可以添加人员,它一切顺利,直到我关闭它并且所有存储的数据都丢失了。这总是发生在我所做的所有较小的项目中,但很多只是应用程序,可以通过一个等式运行一些数字,并给我一个答案,我不需要我得到的数据。但是通过我的电话簿,我希望我的用户打开它并一遍又一遍地使用它。提前谢谢你:D

编辑:我忘了提到我的DataGrid没有绑定到SQL数据库,所以我不能在关闭后打开它。

3 个答案:

答案 0 :(得分:0)

首先,每个Closed都有ClosingWindow个事件。

答案 1 :(得分:0)

正如评论中所提到的,你的问题有点模糊,但是这里有一个例子,你使用二进制序列化来创建一个文件,其中你的数据是在隔离存储中的(参见MSDN Isolated Storage

我假设你有id_indicator id_threshold activation_begin_value activation_end_value ------------ ------------ ---------------------- ---------------------- 1 123 5 6 1 124 6 7 2 127 6 5 2 128 5 4 的某种支持类,所以在这种情况下,我创建了一个名为Contact的类。请注意DataGrid属性:

[Serializable]

然后我列出了这些:

[Serializable]
public class Contact {
    public String Name { get; set; }
    public String Number { get; set; }

    public Contact(String name, String number) {
       Name = name;
       Number = number;
    }
}

您可以覆盖private List<Contact> contacts; 的{​​{1}}方法,然后将数据保存到文件中:

OnClosing

最后,在完成了您需要做的任何初始化之后,您可以查找此文件并恢复您的联系人,如果它们在那里,如下所示。注意如果没有备份,我添加了一些虚拟条目:

Window

答案 2 :(得分:0)

应该将DataGrid的ItemsSource设置或绑定到IEnumerable&lt; T&gt;。为了将数据保存到磁盘上的文件,您可以序列化此IEnumerable&lt; T&gt;中的所有项目。到一个文件。然后在应用程序启动时再将其反序列化。以下示例代码应该为您提供想法。

<强> MainWindow.xaml:

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" />
        <DataGridTextColumn Binding="{Binding Number}" />
    </DataGrid.Columns>
</DataGrid>

<强> MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    private const string _fileName = "phonebook.txt";

    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += (s, e) =>
        {
            //create a List<Item> that contains the data from the file on a background thread
            Task.Run(() => LoadData()).ContinueWith(task =>
            {
                //...and set the ItemsSource property of the DataGrid to the returned List<Item>
                dataGrid.ItemsSource = task.Result;
            }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        };

        this.Closing += (s, e) => SaveData();
    }

    public List<Item> LoadData()
    {
        List<Item> items = new List<Item>();
        if (System.IO.File.Exists(_fileName))
        {
            string[] lines = System.IO.File.ReadAllLines(_fileName);
            foreach (string line in lines)
            {
                string[] columns = line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                if (columns.Length == 2)
                {
                    items.Add(new Item()
                    {
                        Name = columns[0],
                        Number = columns[1]
                    });
                }
            }
        }
        else
        {
            //populate the DataGrid with some default data...
            items.Add(new Item { Name = "Name1", Number = "000-111" });
            items.Add(new Item { Name = "Name2", Number = "111-222" });
        }

        return items;
    }

    private void SaveData()
    {
        IEnumerable<Item> items = dataGrid.ItemsSource as IEnumerable<Item>;
        if (items != null)
        {
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(_fileName))
                foreach (Item item in items)
                    sw.WriteLine($"{item.Name};{item.Number}");
        }
    }
}

<强> Item.cs:

public class Item
{
    public string Name { get; set; }
    public string Number { get; set; }
}

&#34; phonebook.txt&#34;文件将保存在输出目录中 - 通常是c:\ YourProjectFolder \ bin \ Debug或\ bin \ Release从Visual Studio运行应用程序时 - 可执行文件(.exe),除非您更改_fileName字段的值。