첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ BindingList<T> 클래스 : 속성 값 검색 기능 추가하기

------------------------------------------------------------------------------------------------------------------------

using System.ComponentModel;

using System.Reflection;

 

/// <summary>

/// 커스텀 바인딩 리스트

/// </summary>

/// <typeparam name="T">타입</typeparam>

public class CustomBindingList<T> : BindingList<T>

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

    #region 코어 검색 지원 여부 - SupportsSearchingCore

 

    /// <summary>

    /// 코어 검색 지원 여부

    /// </summary>

    protected override bool SupportsSearchingCore

    {

        get

        {

            return true;

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 찾기 - Find(propertyName, key)

 

    /// <summary>

    /// 찾기

    /// </summary>

    /// <param name="propertyName">속성명</param>

    /// <param name="key"></param>

    /// <returns>처리 결과</returns>

    public int Find(string propertyName, object key)

    {

        PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(typeof(T));

 

        PropertyDescriptor propertyDescriptor = propertyDescriptorCollection.Find(propertyName, true);

 

        if(propertyDescriptor == null)

        {

            return -1;

        }

        else

        {

            return FindCore(propertyDescriptor, key);

        }

    }        

 

    #endregion

 

    ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

    #region 코어 찾기 - FindCore(propertyDescriptor, key)

 

    /// <summary>

    /// 코어 찾기

    /// </summary>

    /// <param name="propertyDescriptor">속성 설명자</param>

    /// <param name="key"></param>

    /// <returns>처리 결과</returns>

    protected override int FindCore(PropertyDescriptor propertyDescriptor, object key)

    {

        PropertyInfo propertyInfo = typeof(T).GetProperty(propertyDescriptor.Name);

 

        T item;

 

        if(key != null)

        {

            for(int i = 0; i < Count; ++i)

            {

                item = (T)Items[i];

 

                if(propertyInfo.GetValue(item, null).Equals(key))

                {

                    return i;

                }

            }

        }

 

        return -1;

    }

 

    #endregion

}

------------------------------------------------------------------------------------------------------------------------

 

■ BindingList<T> 클래스 : 속성 값 검색 기능 추가하기 예제

------------------------------------------------------------------------------------------------------------------------

/// <summary>

/// 학생

/// </summary>

public class Student

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 학번 - ID

 

    /// <summary>

    /// 학번

    /// </summary>

    public int ID { get; set; }

 

    #endregion

 

    #region 성명 - Name

 

    /// <summary>

    /// 성명

    /// </summary>

    public string Name { get; set; }

 

    #endregion

 

    #region 학년 - Grade

 

    /// <summary>

    /// 학년

    /// </summary>

    public int Grade { get; set; }

 

    #endregion

}

 

CustomBindingList<Student> customBindingList = new CustomBindingList<Student>();

 

customBindingList.Add(new Student() { ID = 1, Name = "홍길동", Grade = 3 });

customBindingList.Add(new Student() { ID = 2, Name = "홍길숙", Grade = 3 });

customBindingList.Add(new Student() { ID = 3, Name = "홍길도", Grade = 2 });

customBindingList.Add(new Student() { ID = 4, Name = "홍길자", Grade = 1 });

customBindingList.Add(new Student() { ID = 5, Name = "홍길수", Grade = 1 });

 

this.dataGridView.DataSource = customBindingList;

 

int index = customBindingList.Find("Name", "홍길수");

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요