簡體   English   中英

如何在沒有 SQL 的情況下將 Class 用作 C# 中 DataGridView 的數據庫?

[英]How to use a Class as a database for DataGridView in C# without an SQL?

我必須使用 class 作為學校項目的 c# 中 winforms 項目的數據庫,但我們還沒有學習 mySQL。 如何在沒有 mySQL 的情況下將 class 用作數據庫?

謹防不喜歡,我想建議使用Singleton pattern來創建一個 class,它將一些List<T>存儲為“數據庫表”。 也可能有幾個List ,每個代表不同的“數據庫表”( public List<T> Customerspublic List<T> Sales等)。

public sealed class RuntimeDatabase
{
    private List<Person> persons = new List<Person>();

    // List used as database table
    public List<Person> Persons
    {
        get => persons;
        private set => persons = value;
    }

    // Singleton
    private static readonly RuntimeDatabase instance = new RuntimeDatabase();

    public static RuntimeDatabase Instance => instance;

    private RuntimeDatabase() { }
}

您可以在其他地方使用它:

public partial class MainWindow : Window
{
    private readonly RuntimeDatabase DB = RuntimeDatabase.Instance;

    private void GetPersons()
    { 
        dataGrid.ItemsSource = DB.Persons;
    }

    private void AddPerson()
    {   
        Person p = new Person();
        p.Name = "John Wick";
 
        DB.Persons.Add(p);
    }

    private void RemovePerson()
    {   
        Person p = new Person();
        p.Name = "John Wick";
 
        DB.Persons.Remove(p);
    }
}

或者在RuntimeDatabase class 中創建自定義方法包裝器以模仿InsertUpdateDeleteTruncateSelect等操作。

草圖:

public sealed class RuntimeDatabase
{  
    //...

    public List<Person> Select(Func<Person, bool> func)
    {
        return persons.Where(func).ToList();
    }

    public void Insert(Person person)
    {
        persons.Add(person);
    }

    public void Update(Person person)
    {
        persons = persons.Select(x => 
        { 
            if (x.ID == person.ID) // It's preferred to have an ID property to unique each Person (some kind of Primary Key)
            {
                x.SomeProperty = person.SomeProperty;
            }

            return x;
        }).ToList();
    }

    public int Delete(Predicate<Person> predicate)
    {
        return persons.RemoveAll(predicate); // Count of removed elements
    }

    public void Truncate()
    {
        persons.Clear();
    }
}

當然,您可以創建一種方法,在應用程序退出之前將其保存到某個文件中,並在應用程序啟動時加載回來。

示例中使用的Person很簡單 model class:

public class Person 
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string SomeProperty { get; set; }
}

隨意向我扔泥巴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM