用户可编辑数据库中的重复ID:如何提供唯一ID号?

时间:2018-04-20 19:27:05

标签: c# duplicates

我一直在为我的问题寻找解决方案,但没有什么是我需要的。所以,就是这样。

在我的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>

  1. 添加项目。只有material_data.Descriptionmaterial_data.Data作为用户输入,而material_data.ID是以编程方式设置的。 已添加的material_data项可以保存到二进制文件

  2. 编辑项目。只能编辑material_data.Descriptionmaterial_data.Data,保留material_data.ID。更改将保存到原始二进制文件中。

  3. 删除项目。二进制文件不会被删除,因此可以使用保存的二进制文件再次添加已删除的项目。

  4. 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<>似乎就足够了。

0 个答案:

没有答案