문제

vb.net / winforms에서 해시 가능이 어떻게 드롭 다운 목록 또는 기타 데이터 소스 중심 제어에 묶일 수 있습니까?

도움이 되었습니까?

해결책

이 winforms, wpf 또는 asp.net입니까? [업데이트 : AHH ... WINFORMS;-P

Winforms는 데이터가되기를 원합니다 IList (또는 간접적으로, IListSource) - 그래서 나는 당신이 winforms를 사용하고 있다고 추측하고 있습니다. 내장 된 사전과 같은 컬렉션은 구현되지 않았습니다 IList, 그러나 솔직히 말해서는 중요하지 않습니다. 데이터 바인딩이라면 볼륨이 상당히 작기 때문에 일반 목록은 괜찮을 것입니다.

최선의 선택은 A와 같은 것입니다 List<T> 또는 BindingList<T>, 어디 T 바인딩하고자하는 모든 속성이 있습니다. 이것이 옵션입니까? 1.1에 갇혀 있다면 (언급 이후 HashTable 보다는 Dictionary<,>), 그런 다음 사용하십시오 ArrayList.

예제 (C#) :

class MyData
{
    public int Key { get; set; }
    public string Text { get; set; }
}
[STAThread]
static void Main()
{
    var data = new List<MyData>
    {
        new MyData { Key = 1, Text = "abc"},
        new MyData { Key = 2, Text = "def"},
        new MyData { Key = 3, Text = "ghi"},
    };
    ComboBox cbo = new ComboBox
    {
            DataSource = data,
            DisplayMember = "Text",
            ValueMember = "Key"
    };
    cbo.SelectedValueChanged += delegate {
        Debug.WriteLine(cbo.SelectedValue);
    };
    Application.Run(new Form {Controls = {cbo}});
}

다른 팁

드롭 다운 목록의 DataSource 속성 만 사용하십시오

   DropDownList dd = new DropDownList();
   Hashtable mycountries = New Hashtable();
   mycountries.Add("N","Norway");
   mycountries.Add("S","Sweden");
   mycountries.Add("F","France");
   mycountries.Add("I","Italy");
   dd.DataSource=mycountries;
   dd.DataValueField="Key";
   dd.DataTextField="Value";
   dd.DataBind();

순서라는 주어진 개체의 예 :

List<Order> list = new List<Order>{};

foreach (Order o in OOS.AppVars.FinalizedOrders.Values)
{
  list.Add(o);
}

this.comboBox_Orders.DataSource = list;
this.comboBox_Orders.DisplayMember = "Description";

이에 대한 멋진 점은 원래 객체 (ASP.NET에서와 같이 값 필드뿐만 아니라)로 목록에서 데이터를 다시 가져올 수 있다는 것입니다.

Order order = (Order)this.comboBox_Orders.SelectedValue;

.Tolist를 사용하십시오. 또한 엔티티 프레임 워크에서보기/저장 절차에서 얻은 반환 된 복잡한 유형에 대해서도 작동합니다.

그리고 DataSource로 Dictionary를 사용하면 사용할 수 있습니다.

MyDDL.Datasouce = myDict.ToList();

그리고 목록 유형으로 변환합니다.

myCtrl.DataSource = myHashtable
myCtrl.DataBind()

바인딩 가능한 제어의 예제 :

<itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
    <%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top