2011-08-17 38 views
0

在我的程序中,我需要添加一個插入類別的函數。我正在使用treeView來顯示數據。如何爲記錄數據庫創建添加功能?

How can I model this class in a database?

enter image description here

用戶插入的水平,並且程序必須插入該級別類別。但我很累。因爲它需要檢查其他級別是否存在(IE:treeView是空的,我想添加2.1,所以這是一個錯誤)。

有時,您可能會添加一個已設置的級別,因此必須禁止。

我在代碼中需要一點幫助。它已完成,但我想改進它或修正錯誤(如果是這樣)。

下面是代碼:

private void AddButton_Click(object sender, RoutedEventArgs e) 
    { 
     NorthwindDataContext cd = new NorthwindDataContext(); 

     int[] levels = LevelTextBox.Text.ToIntArray('.'); 
     string newName = NameTextBox.Text; 

     int[] parentLevels = new int[levels.Length - 1]; 
     Array.Copy(levels, parentLevels, parentLevels.Length); 
     Objective current = GetNode(levels); 
     Objective parent = GetNode(parentLevels); 

     if (current != null) 
     { 
      MessageBox.Show("Level already exists"); 
      return; 
     } 
     else if (parent == null && parentLevels.Length != 0) 
     { 
      MessageBox.Show("Parent level doesn't exist"); 
      return; 
     } 

     var newObjective = new Objective(); 
     newObjective.Name = newName; 
     newObjective.Level = levels.Last(); 
     newObjective.Parent_ObjectiveID = parent == null ? null : (int?)parent.ObjectiveID; 

     cd.Objective.InsertOnSubmit(newObjective); 
     cd.SubmitChanges(); 

     MessageBox.Show("The new objective has added successfully"); 
     NameTextBox.Clear(); 
     LoadObjectives(); 
    } 

    public Objective GetNode(params int[] indexes) 
    { 
     return GetNode(null, 0, indexes); 
    } 

    public Objective GetNode(int? parentid, int level, params int[] indexes) 
    { 
     NorthwindDataContext cd = new NorthwindDataContext(); 
     Objective item = null; 

     if (indexes.Length == 0) 
      return null; 

     if (parentid == null) 
     { 
      item = (from p in cd.Objective 
        where p.Level == indexes[level] && p.Parent_ObjectiveID == null 
        select p).SingleOrDefault(); 

     } 
     else 
     { 
      item = (from p in cd.Objective 
        where p.Level == indexes[level] && p.Parent_ObjectiveID == parentid 
        select p).SingleOrDefault(); 
     } 

     if (item == null) 
      return null; 

     if (++level < indexes.Length) 
      item = GetNode(item.ObjectiveID, level, indexes); 

     return item; 
    } 

回答

1

你爲什麼不讓用戶選擇應該被添加到新的類別父節點?你可以讓他們只需點擊一個父節點,然後添加一個新節點。不涉及任何檢查。我知道這並沒有回答你的直接問題,但你目前的做法很難對你的用戶

相關問題