如何在c#中使用List创建备用数据库?

时间:2012-12-17 02:53:46

标签: c# winforms datagridview treeview

我想在连接到数据库之前创建一个临时数据库来测试我的应用程序。我想从Treeview和Datagridview中的替代数据库中填充这些数据。我的树视图看起来像这样:

管理员

    • 用户
      • 演示
  • 管理器

每次点击一个节点,相应的数据都会出现在我的Datagridview中。就像当我点击“群组”时,它下面的数据如“用户”等将出现与他们相应的帐户,如“演示”和“直播”。当我点击“Demo”时,它的相应帐户也会出现。如何在c#中使用List执行替代数据库?非常感谢您的回复。

3 个答案:

答案 0 :(得分: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加载到此类中。

答案 1 :(得分: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 {..}

答案 2 :(得分:0)

虽然@Shyju描述的手动解决方案适用于少量项目。

更好的选择是使用像AutoPoco这样的库。斯科特·汉塞尔曼(Scott Hanselmann)前段时间在this blog post中描述了一个关于它的使用的非常好的介绍。

以下示例是Scott的博客文章中稍微修改过的代码版本(没有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个对象。