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