이번 글은 WPF Datagrid를 사용할 때 선택한 Row에서 각 Column 값을 가져오는 예제이다. 아래 소스는 클래스 모델(Database라고 가정)을 그리드에 바인딩하고 Cell 안의 버튼 이벤트와 Row 선택 이벤트를 어떻게 작성하는지 보여준다.
using System.Collections.ObjectModel;
namespace WPFDB
{
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public static ObservableCollection<Student> GetStudent()
{
var student = new ObservableCollection<Student>
{
new Student() { ID = 100, Name = "가나닭-abc" },
new Student() { ID = 200, Name = "마바삵-ABC" }
};
return student;
}
}
}
디자인 패턴은 소프트웨어 디자인 및 아키텍처의 중용한 부분이다. 디자인 패턴이란 ‘Creational Design Patterns’, ‘Structural Design Patterns’, ‘Behavioral Design Patterns’와 같이 3가지 유형으로 나누어 볼 수 있다(C-SharpCorner 2013). 애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴(JEONG_AMATEUR 2017)인 ‘Singleton Design Pattern’에 대해 간략하게 정리하였다. Singleton과 Static 함수의 차이점은 Singleton인 경우 멤머 변수 등을 가지며 생성자/소멸자에서 뭔가를 해야 할 경우 그리고 Static 함수로 구성하는 경우는 멤버 변수 및 this 포인트를 쓸 필요 없으며 생성자/소멸자에서 뭔가 할 필요가 없을 때(KLDP 2013) 이다.
Singleton 패턴의 장단점에 대해서는 ‘Singleton Design Pattern In C#’ 글을 참고하자.
아래의 소스(콘솔예제)는 기본적인 사용법과 스레드(thread)에 안정적인 사용법을 보여준다.
예전 글 ‘ASP.NET MVC, Delete Multiple Rows With Checkbox’에서 SQL의 ‘where’ 구문의 조건으로 ‘in’ list에 테이블 변수(타입)를 대입해서 한 번에 여러 Row를 처리하는 쿼리를 살펴보았다. 이때 선행조건으로 테이블 타입을 생성해야만 하는데 이번에는 IN list에 콤마로 구분된 스트링이 변수로 입력되었을 때도 동일한 기능을 수행하는 사용자 함수를 만들어 사용해보자. 참고로 SQL Server 2016 버전 이상은 ‘STRING_SPLIT’라는 함수를 이미 제공하고 있다.
-- 사용예 : 함수명(StringSplit)
@SomeStrings = 'abc, 가나다, 123'
delete from SomeTable where ID in (select value from StringSplit(@SomeStrings, ','))