해시 가능이 어떻게 드롭 다운 목록에 묶일 수 있습니까?
-
08-07-2019 - |
문제
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>