[DEVEXPRESS/WINFORM] GridControl 클래스 : 데이터 주석 어트리뷰트를 갖는 데이터 소스 바인딩하기
DevExpress/WinForm 2020. 5. 5. 00:26728x90
728x170
▶ CompanyProductMetadata.cs
using System.ComponentModel.DataAnnotations;
namespace TestProject
{
/// <summary>
/// 회사 제품 메타 데이터
/// </summary>
public class CompanyProductMetadata
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 회사명
/// </summary>
[Display(ShortName = "Company", Name = "Company Name", AutoGenerateFilter = false)]
public object CompanyName;
/// <summary>
/// 국가
/// </summary>
[Display(Order = 2)]
public object Country;
/// <summary>
/// 도시
/// </summary>
[Display(Order = 1), Editable(false)]
public object City;
/// <summary>
/// URL
/// </summary>
[DataType(DataType.Url)]
public object URL;
/// <summary>
/// E 메일
/// </summary>
[DataType(DataType.EmailAddress)]
public object EMail;
/// <summary>
/// 전화
/// </summary>
[DataType(DataType.PhoneNumber), Required]
public object Phone;
/// <summary>
/// 텍스트
/// </summary>
[DataType(DataType.Text), Display(Order = -1)]
public object Text;
/// <summary>
/// 부가 정보
/// </summary>
[Display(AutoGenerateField = false, Description = "This column isn't created")]
public object AdditionalInfo;
/// <summary>
/// 패스워드
/// </summary>
[DataType(DataType.Password), StringLength(20, MinimumLength = 3)]
public object Password;
/// <summary>
/// 날짜 2
/// </summary>
[DisplayFormat(DataFormatString = "MMMM/yyyy"), Display(Name = "Date 2")]
public object Date2;
/// <summary>
/// 판매액
/// </summary>
[DisplayFormat(DataFormatString = "#,##0,,M")]
public object Sales;
/// <summary>
/// 이익
/// </summary>
[DisplayFormat(DataFormatString = "#,##0,,M")]
public object Profit;
/// <summary>
/// 판매 대 대상
/// </summary>
[DisplayFormat(DataFormatString = "p", ApplyFormatInEditMode = true), Display(Name = "Sales vs Target")]
public object SalesVsTarget;
/// <summary>
/// 시장 점유율
/// </summary>
[DisplayFormat(DataFormatString = "p0", ApplyFormatInEditMode = false)]
public object MarketShare;
/// <summary>
/// 고객 만족도
/// </summary>
[Display(Name = "Cust Satisfaction")]
public object CustomersSatisfaction;
#endregion
}
}
728x90
▶ CompanyPublicInfo.cs
using System.ComponentModel.DataAnnotations;
namespace TestProject
{
/// <summary>
/// 회사 공개 정보
/// </summary>
[MetadataType(typeof(CompanyProductMetadata))]
public class CompanyPublicInfo
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 회사명 - CompanyName
/// <summary>
/// 회사명
/// </summary>
public string CompanyName { get; set; }
#endregion
#region 국가 - Country
/// <summary>
/// 국가
/// </summary>
public string Country { get; set; }
#endregion
#region 도시 - City
/// <summary>
/// 도시
/// </summary>
public string City { get; set; }
#endregion
#region URL - URL
/// <summary>
/// URL
/// </summary>
public string URL { get; set; }
#endregion
#region E 메일 - EMail
/// <summary>
/// E 메일
/// </summary>
public string EMail { get; set; }
#endregion
#region 전화 - Phone
/// <summary>
/// 전화
/// </summary>
public string Phone { get; set; }
#endregion
#region 부가 정보 - AdditionalInfo
/// <summary>
/// 부가 정보
/// </summary>
public string AdditionalInfo { get; set; }
#endregion
}
}
300x250
▶ CompanyPrivateInfo.cs
using System;
using System.ComponentModel.DataAnnotations;
namespace TestProject
{
/// <summary>
/// 회사 사적 정보
/// </summary>
[MetadataType(typeof(CompanyProductMetadata))]
public class CompanyPrivateInfo
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 패스워드 - Password
/// <summary>
/// 패스워드
/// </summary>
public string Password { get; set; }
#endregion
#region 날짜 2 - Date2
/// <summary>
/// 날짜 2
/// </summary>
public DateTime Date2 { get; set; }
#endregion
#region 판매액 - Sales
/// <summary>
/// 판매액
/// </summary>
public double Sales { get; set; }
#endregion
#region 이익 - Profit
/// <summary>
/// 이익
/// </summary>
public double Profit { get; set; }
#endregion
#region 판매 대 대상 - SalesVsTarget
/// <summary>
/// 판매 대 대상
/// </summary>
public double SalesVsTarget { get; set; }
#endregion
#region 시장 점유율 - MarketShare
/// <summary>
/// 시장 점유율
/// </summary>
public double MarketShare { get; set; }
#endregion
#region 고객 만족도 - CustomersSatisfaction
/// <summary>
/// 고객 만족도
/// </summary>
public double CustomersSatisfaction { get; set; }
#endregion
}
}
▶ ProductCategory.cs
namespace TestProject
{
/// <summary>
/// 제품 카테고리
/// </summary>
public enum ProductCategory
{
/// <summary>
/// 음료
/// </summary>
Beverages = 1,
/// <summary>
/// 과일
/// </summary>
Fruit = 2,
/// <summary>
/// 채소
/// </summary>
Vegetables = 3,
/// <summary>
/// 고기
/// </summary>
Meat = 4,
/// <summary>
/// 양념
/// </summary>
Condiments = 5,
/// <summary>
/// 과자
/// </summary>
Confections = 6,
/// <summary>
/// 유제품
/// </summary>
DairyProducts = 7,
/// <summary>
/// 곡물
/// </summary>
GrainsCereals = 8,
/// <summary>
/// 해산물
/// </summary>
Seafood = 9
}
}
▶ Product.cs
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace TestProject
{
/// <summary>
/// 제품
/// </summary>
public class Product
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 단가 - UnitPrice
/// <summary>
/// 단가
/// </summary>
[ReadOnly(true)]
public double UnitPrice { get; set; }
#endregion
#region 카테고리 - Category
/// <summary>
/// 카테고리
/// </summary>
[EnumDataType(typeof(ProductCategory))]
public int Category { get; set; }
#endregion
#region 수량 - Quantity
/// <summary>
/// 수량
/// </summary>
[Display(Description = "The amount of currently available product")]
public int Quantity { get; set; }
#endregion
#region 텍스트 - Text
/// <summary>
/// 텍스트
/// </summary>
[DataType(DataType.Text), Display(Order = -1)]
public string Text { get; set; }
#endregion
#region 멀티 라인 텍스트 - MultilineText
/// <summary>
/// 멀티 라인 텍스트
/// </summary>
[DataType(DataType.MultilineText)]
public string MultilineText { get; set; }
#endregion
#region 통화 - Currency
/// <summary>
/// 통화
/// </summary>
[DataType(DataType.Currency), Range(200, 5000)]
public int Currency { get; set; }
#endregion
#region 날짜 - Date
/// <summary>
/// 날짜
/// </summary>
[DataType(DataType.Date)]
public DateTime Date { get; set; }
#endregion
#region 시간 - Time
/// <summary>
/// 시간
/// </summary>
[DataType(DataType.Time)]
public DateTime Time { get; set; }
#endregion
}
}
▶ MainForm.cs
using System;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : XtraForm
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.gridView.OptionsView.ShowGroupPanel = false;
this.gridView.OptionsView.ColumnAutoWidth = false;
this.dataTypeBarEditItem.EditValueChanged += dataTypeBarEditItem_EditValueChanged;
this.gridControl.DataSourceChanged += gridControl_DataSourceChanged;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 데이터 타입 바 편집 항목 편집 값 변경시 처리하기 - dataTypeBarEditItem_EditValueChanged(sender, e)
/// <summary>
/// 데이터 타입 바 편집 항목 편집 값 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataTypeBarEditItem_EditValueChanged(object sender, EventArgs e)
{
switch(this.dataTypeBarEditItem.EditValue as string)
{
case "Company public info" : this.gridControl.DataSource = DataHelper.GetCompanyPublicInfoList(); break;
case "Company private info" : this.gridControl.DataSource = DataHelper.GetCompanyPrivateInfoList(); break;
case "Product info" : this.gridControl.DataSource = DataHelper.GetProductList(); break;
}
}
#endregion
#region 그리드 컨트롤 데이터 소스 변경시 처리하기 - gridControl_DataSourceChanged(sender, e)
/// <summary>
/// 그리드 컨트롤 데이터 소스 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridControl_DataSourceChanged(object sender, EventArgs e)
{
this.gridControl.MainView.PopulateColumns();
(this.gridControl.MainView as GridView).BestFitColumns();
}
#endregion
}
}
728x90
그리드형(광고전용)