2009-10-21 4 views
0
public class FontType 
    { 
     ... 
     public String Name { get { return _name; } } 
     public String DisplayName { get { return _displayName; } } 
     public Font UseFont { get { return _font; } } 
    } 


bindFontTypes.DataSource = availableFonts; 
comboFontType.DataSource = bindFontTypes; 
comboFontType.ValueMember = "Key"; 
comboFontType.DisplayMember = ...???; 

여기에서 bindFontTypes은 BindingSource입니다. availableFonts은 키가 문자열 인 Hashtable이며 값은 FontType의 개체입니다. comboFontType.DisplayMember에 대해 개체의 .DisplayName 속성을 사용하고 싶습니다. 어떻게 지정해야합니까? 가능한가?C# : 해시 테이블을 콤보 상자에 바인딩하는 질문

답변

1

당신이 FontType에 대한

comboFontType.DisplayMember = "Value"; // FontType 

및 과부하 ToString()를 설정하면 그것은 작동하지 않을 수 있습니다.

ToString()의 대안으로 콤보 상자의 Format 이벤트를 처리 할 수 ​​있습니다.

그러나 데이터 바인딩이 이런 식으로 작동하는지 확실하지 않습니다. 내가 마지막 ... 나는 그들 모두를 얻기에 일하고 해시 테이블에 추가에 geting하고 DisplayMember = "Value.DisplayName"를 사용하여

+0

그것은 고맙습니다! – flamey

1

는 ....

이것은 내가 무슨 짓을 ...하지만 마지막 항목을 가져 오기 바인딩하는 Hashtable에서 ....

BindingSource src = new BindingSource(); 
      src.DataSource = new Hashtable 
      { 
      { 
       "blah", 
       new FontType 
       { 
        Name = "newFont", 
        DisplayName = "new Font" 
       } 
       }, 
       { 
        "another", 
        new FontType 
        { 
         Name = "anotherFont", 
         DisplayName = "another Font" 
        } 
        } 
      }; 
      comboBox1.DataSource = src; 
      comboBox1.ValueMember = "Key"; 
      comboBox1.DisplayMember = "Value.DisplayName"; 
+0

이렇게하면 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"어딘가에 있습니다. 혼자서하는 프로그램이 아니며, 디버깅하는 것이 쉽지 않습니다. 다른 해결책이 효과가있었습니다. 하지만 답장을 보내 주셔서 감사합니다. – flamey

관련 문제