我一直在为我的问题寻找解决方案,但没有什么是我需要的。所以,就是这样。
在我的Windows窗体应用程序中,我有TreeView
填充List<material_data>
作为我的数据库。
public class material_data
{
public int ID { get; set; }
public string Description { get; set; }
public double[] Data { get; set; }
}
public void PopulateTreeView (List<material_data> database, TreeView treeView)
{
foreach (material_data material in database)
{
TreeNode node = new TreeNode {
Name = material.ID.ToString(),
Text = material.Description,
Tag = material.Data
};
treeView.Nodes.Add(node);
}
}
用户可以通过以下方式操作此List<material_data>
添加项目。只有material_data.Description
和material_data.Data
作为用户输入,而material_data.ID
是以编程方式设置的。 已添加的material_data
项可以保存到二进制文件。
编辑项目。只能编辑material_data.Description
和material_data.Data
,保留material_data.ID
。更改将保存到原始二进制文件中。
删除项目。二进制文件不会被删除,因此可以使用保存的二进制文件再次添加已删除的项目。
对List<material_data>
进行任何更改后,TreeView都会更新。我的第一种方法是将新ID设置为列表中的最大ID加1.但是,如果删除了最大的ID,然后添加了新材料,则会创建重复的ID,并且用户将无法恢复二进制文件中的旧材料。另一个缺陷是,由于二进制文件的保存/加载,我很快就忘记了ID号。
我的下一个解决方案是存储CounterID
用户设置,这样即使删除项目或关闭会话,ID计数也不会再返回。
int ID_Counter = Properties.Settings.Default.CounterID;
ID_Counter++;
new_material.ID = ID_Counter;
Properties.Settings.Default.CounterID = ID_Counter;
这是成功的,但是如果设置文件发生错误(正如我在编程时我的电脑突然关闭时发生的那样)并且计数器被重置,那么将来会破坏所有会话。
在这种情况下,是否还有其他解决重复ID问题的方法?或者我应该重新考虑将二进制文件保存并加载到数据库的想法?
由于我对Visual Studio / C#相对较新,我怀疑还有其他功能,我没有探索。我不知道使用DataTable
或SQL数据库是否会更好,但对我的情况来说,一个简单的List<>
似乎就足够了。