2009-09-04 4 views

답변

4

대신 문자열을 추가하는,에서 IComparable을 구현하고 ToString을 재정의하는 클래스를 만듭니다.

그런 다음 데이터 소스를 얻을 수

1. 가치 추가 필드를 반환하는 뷰 (즉, 저장 프로 시저)와 같은 데이터 소스를 작성하여 콤보

+0

그래도 나는 "MasterValue"를 표시된 값으로 사용하고 맨 위에 있어야하는 "MasterValue"를 제외한 모든 개체의 ToString() 값에 따라 정렬합니다. 당신의 대답은 속임수입니까? – Toto

+0

@Duaner : 아이디어는 comboBox가 IComparable 인터페이스의 CompareTo 함수를 호출하는 요소를 정렬한다는 것입니다. 당신이해야 할 일은 String 클래스 주위에 래퍼를 만드는 것입니다. ToString은 comboBox에 원하는 문자열을 반환하고 CompareTo는 원하는 순서를 유지하도록합니다. String가 "MasterValue"인 경우 CompareTo는 항상 <0을 반환하므로 "MasterValue"가 항상 첫 번째입니다. –

+4

.NET 3.5에서는이 기능이 작동하지 않습니다. System.Windows.Forms.ComboBox에는 IComparable 인터페이스 대신 ToString()을 호출하는 GetItemText() 속성을 실제로 호출하는 내부 ItemComparer 클래스가 있습니다. –

4

다음 코드는이 트릭을 수행합니다.

  1. 정렬 할 항목의 개별 목록을 만든 다음 AddRange를 사용하십시오.

    comboBox1.Items.Add("Master"); 
    
    List<String> listToSort = new List<String>(); 
    
    listToSort.Add("6nd"); 
    listToSort.Add("3nd"); 
    listToSort.Add("5nd"); 
    listToSort.Add("4nd"); 
    listToSort.Add("2nd"); 
    
    listToSort.Sort(); 
    
    comboBox1.Items.AddRange(listToSort.ToArray<String>()); 
    
+0

둘째, 셋째, fourton? – Lars

1

해당 클래스의 인스턴스를 추가하고 추가를 추가 행을 데이터보기에 추가하고 추가 필드의 값은 0입니다.

그런 다음 해당 필드를 처음에 정렬 한 다음 필드의 설명을 기준으로 정렬합니다.

이렇게하면 항상 '마스터 값'을 먼저 입력 한 다음 다른 알파벳순으로 정렬합니다.

private void PopulateCombo() 
{ 
    // get data view that returns 3 columns, 
    //master sort column set to 1, id, and description // 
    DataView view = GetSource(); 

    // add a new row to the data source that has column values 
    // 0 for master sort column (all others are returned 1 
    // an appropriate ID and a description 
    // data view columns = master sort column, id, description  
    view.Table.Rows.Add(new object[] {0, 1, "MasterValue"}); 

    // sort first by master column then description // 
    view.Sort = "MasterSortColumn ASC, Description ASC"; 

    combo.DataSource = view; 
    combo.ValueMember = "Id"; 
    combo.DisplayMember = "Description"; 
}