2012-12-17 40 views
0

我想在連接到數據庫之前創建一個臨時數據庫來測試我的應用程序。我想從TreeView和Datagridview的替代數據庫中填充這些數據。我的樹形應該是這樣的:如何使用c#中的列表創建我的替代數據庫?

管理員

  • 集團
    • 用戶
      • 演示
      • 直播
  • 經理

每次我點擊一個節點,相應的數據就會出現在我的Datagridview中。就像當我點擊「Group」時,它下面的數據就像「用戶」等會出現在他們相應的帳戶中,如「Demo」和「Live」。當我點擊「演示」時,其相應的帳戶也會出現。我怎樣才能做我的替代數據庫與C#中的列表?非常感謝您的回覆。

+0

它是否必須是一個列表,你不能只使用'Datatable'? –

回答

1

創建一類像這樣

public class TreeItem 
{ 
    public int ID { set;get;} 
    public string Name { set;get;} 
    public List<TreeItem> Children {set;get;} 
} 

現在,您可以創建一個樹這樣

var tree=new TreeItem(); 
tree.ID=1; 
tree.Name="Group"; 

tree.Childrens=new List<TreeItem>(); 
var childUser=new TreeItem { ID=2, Name="User"}; 
tree.Childrens.Add(childUser); 

childUser.Childrens=new List<TreeItem>(); 
var childDemo=new TreeItem { ID=3, Name="Demo"}; 
childUser.Childrens.Add(childDemo); 

var childLive=new TreeItem { ID=4, Name="Live"}; 
childUser.Childrens.Add(childLive); 

這只是硬編碼的一切!理想情況下,您應該將這個分層數據放在XML中,然後將XML加載到這些類中。

0

看起來你正在尋找一個模式。

Composite Pattern似乎是最好的搭配!

示例代碼(未編譯):

public interface IComponent{ 
    string Name{get;} 
    IEnumerable<IComponent> Childrens{get;} 
} 
public class Group : IComponent{ 
    private List<User> _users; 
    --- 
    IEnumerable<IComponent> Childerns{ get{ return _users;}} 
} 
public class User : IComponent { 
    private List<Demo> _demos; 
    private List<Live> _lives; 

    IEnumerable<IComponent> Childresn { get { return _demos.Cast<IComponent>().Union(_lives.Cast<IComponent>()); }} 
} 
public class Demo : IComponent{..} 
public class Live : IComponent {..} 
0

雖然通過@Shyju描述的手動解決方案有利於小數量的項目。

更好的選擇是使用像AutoPoco這樣的庫。前段時間,Scott Hanselmann在this blog post中描述了關於其使用的一個很好的介紹。

下面的例子是略加修改的代碼(SANS Impose約束)從斯科特的博客文章舉:

public void MakeTestData() 
{ 
    IGenerationSessionFactory factory = AutoPocoContainer.Configure(x => 
    { 
     x.Conventions(c => { c.UseDefaultConventions(); }); 
     x.AddFromAssemblyContainingType<SimpleUser>(); 
    }); 

    IGenerationSession session = factory.CreateSession(); 

    IList<SimpleUser> users = session.List<SimpleUser>(1000).Get(); 


} 

IList<SimpleUser> users現在包含1000個SimpleUser對象。

相關問題