![](/img/trans.png)
[英]How to use DatagridView on a List without using Database in C# Winforms
[英]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> Customers
, public 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 中創建自定義方法包裝器以模仿Insert
、 Update
、 Delete
、 Truncate
、 Select
等操作。
草圖:
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.