모델 번호가 있는 데이터 세트를 Windows 형식으로 대체하고 POCO를 사용해 보십시오
Windows 포맷
DataGridView
과 같은 데이터베이스 어플리케이션을 구축할 때나는 데이터의 용기 사용 유형
DataSet
이 정식이라고 생각한다.하지만 디자이너가 잘 못해서 이런 스타일링이 싫어요.
이번에는 모델
DataSet
대신 일반 대상(POCO)을 데이터 용기로 사용했다.BindingListView와 Dapper를 제3자의 라이브러리로 사용한다.
완성품은 여기에 두세요.
https://github.com/mono1729/BindingWithPoco
만든 물건
DataSet
으로 머리 단추를 눌러 정렬할 수 있습니다.사용
DataGridView
도 데이터의 상세한 형식(그림의 하층)을 나타낸다.목록의 선택한 줄과 동기화를 표시합니다.이번 응용 프로그램은 다음과 같은 절차에 따라 제작되었다.
BindingSource
클래스클래스
Product
에서 구현Product
정의 대체
INotifyPropertyChanged
/DataTable
의 모음DataView
/BindingList<Product>
BindingListView<Product>
에서 데이터를 읽고 이를 바탕으로 생성BindingList<Product>
실례BindingListView<Product>
BindingListView<Product>
의BindingSource
DataSource
BindingSource
의DataGridView
Products 테이블 데이터의 컨테이너 클래스를 준비합니다.
데이터를 업데이트할 때 화면에 통지해야 하기 때문에 설치해야 한다
DataSource
.필드가 많으면 번거롭기 때문에 T4 텍스트 템플릿이나Fody를 사용하는 것이 좋습니다.
Product.cs
public class Product : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private int _ProductID;
public int ProductID
{
get { return _ProductID; }
set
{
_ProductID = value;
OnPropertyChanged("ProductID");
}
}
private string _ProductName;
public string ProductName
{
get { return _ProductName; }
set
{
_ProductName = value;
OnPropertyChanged("ProductName");
}
}
/*以下略*/
데이터 원본 기능을 사용하여 화면 설계를 진행하다만들어진 클래스를 Visual Studio 데이터 원본에 등록하고 창 디자이너에게 끌어다 놓으면 목록과 디테일을 만들 수 있습니다.
함께
INotifyPropertyChanged
와BindingSource
부품이 배치되었지만, 이번에는 사용하지 않기 때문에BindingNavigator
없애주세요.모음집 바인딩 준비
창의 코드 배경에 귀속할 모음집을 준비하십시오.
데이터 저장용
BindingNavigator
과 귀속용BindingList<Product>
두 구성원을 준비합니다.Form1.cs
using Equin.ApplicationFramework;
namespace BindingWithPoco
{
public partial class Form1 : Form
{
private BindingList<Product> _products;
private BindingListView<Product> _productsView;
데이터 읽기 바인딩Micro-ORM
BindingListView<Product>
을 사용하여 Products 테이블의 데이터를 읽고 Dapper
에 결과를 입력합니다.이것을 원시 데이터로 삼아
BindingList<Product>
대상BindingListView<Product>
을 만듭니다.그런 다음
DataView
를 BindingListView<Product>
로 설정합니다.BindingSource.DataSource
에서 설정DataGridView.DataSource
, 간접 참조BindingSource
.Form1.cs
using Dapper;
public partial class Form1 : Form
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
LoadData();
}
private void LoadData()
{
var connStr = Properties.Settings.Default.db;
var conn = new SqlConnection(connStr);
var sql = "SELECT * FROM Products;";
_products = new BindingList<Product>(conn.Query<Product>(sql).ToList());
_productsView = new BindingListView<Product>(_products);
bindingSource1.DataSource = _productsView;
dataGridView1.DataSource = bindingSource1;
}
필터 기능의 실현텍스트 상자를 배치하여 TextChanged 이벤트에서 필터링합니다.
BindingListView<Product>
는 BindingListView
와 같은 필터식을 사용할 수 없습니다.익명으로 필터 조건을 설정합니다.
Form1.cs
public partial class Form1 : Form
{
private void textBox1_TextChanged(object sender, EventArgs e)
{
var inputLower = ((TextBox)sender).Text.ToLower();
_productsView.ApplyFilter(p => p.ProductName.ToLower().Contains(inputLower));
}
작업 검증 버튼 설치DataTable
와INotifyPropertyChanged
를 사용했기 때문에 화면 표시 후 데이터를 만지작거려도 화면에 변경 사항을 반영해야 한다.[Addrow] 버튼과 [Modify first row] 버튼을 설정하여 코드를 확인합니다.
Form1.cs
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
_products.Add(new Product
{
ProductID = 999,
ProductName = "Added!"
});
}
private void button2_Click(object sender, EventArgs e)
{
_products[0].ProductName = "MODIFIED!";
}
동작 확인정렬 필터도 실행되고 데이터의 변경도 바로 화면에 반영된다.
총결산
이번에는
BindingList
,INotifyPropertyChanged
,BindingList
를 사용하여 모델BindingListView
과 같은 양방향 데이터로 연결된 Windows 표 응용을 구축할 수 있다.많은 시간이 걸리지만
DataSet
/DataSet
이하의 기능을 실현할 수 없다.DataTable
DataRow.RowError
, DataRow.RowState
/DataTable.AcceptChanges
DataTable.RejectChanges
DataSet.Relations
을 솔직하게 사용하는 것이 행복할 수도 있는데...Enity Framework로 하면 가능할 것 같아서요.
Reference
이 문제에 관하여(모델 번호가 있는 데이터 세트를 Windows 형식으로 대체하고 POCO를 사용해 보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mono1729/items/cfc2c057baa8cf2cc05d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)