Mar*_*cel 10 c# data-binding combobox properties
我搜索了2个小时或更长时间,找不到答案.所以我在这里试试:
我想知道如何(以及是否可以完成)我可以将模型列表数据绑定到WinForms ComboBox,并使用模型属性的属性(列表中的属性)作为DisplayMember吗?请参阅此处代码:
public partial class Form1 : Form
{
private List<UserDataModel> userData = new List<UserDataModel>();
public Form1()
{
InitializeComponent();
MyInit();
}
public void MyInit()
{
var userDataModel1 = new UserDataModel();
userDataModel1.Name = "Mike";
userDataModel1.Phone = "555-666";
userDataModel1.Home = new HomeDataModel();
userDataModel1.Home.StreetName = "MikeStreet";
userDataModel1.Home.GeoLocationX = 111;
userDataModel1.Home.GeoLocationY = 222;
var userDataModel2 = new UserDataModel();
userDataModel2.Name = "Jonathan";
userDataModel2.Phone = "777-888";
userDataModel2.Home = new HomeDataModel();
userDataModel2.Home.StreetName = "JonathanStreet";
userDataModel2.Home.GeoLocationX = 333;
userDataModel2.Home.GeoLocationY = 444;
userData.Add(userDataModel1);
userData.Add(userDataModel2);
// This works as usually:
/*
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Home";
comboBox1.DataSource = userData;
*/
// But this works not (either with comboBox1.DataBindings.Add() nor with BindingSource):
comboBox1.DisplayMember = "Home.StreetName";
comboBox1.ValueMember = "Home";
comboBox1.DataSource = userData;
// To drive me crazy, THAT shit works:
textBox1.DataBindings.Add("Text", userData, "Home.StreetName");
/*
So how can i use a String-Property of a SubObject as ComboBox-DisplayMember ???
BTW: To rebuild the sample, you only need a normal Forms Application and
then drop a ComboBox and a TextBox on it. Copy that code here, and run it.
*/
}
}
internal sealed class UserDataModel
{
public string Name { get; set; }
public string Phone { get; set; }
public HomeDataModel Home { get; set; }
}
internal sealed class HomeDataModel
{
public string StreetName { get; set; }
public int GeoLocationX { get; set; }
public int GeoLocationY { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
刚刚在代码中添加了一个方法(实际上是事件),并且它正在运行.
public partial class Form1 : Form
{
private List<UserDataModel> userData = new List<UserDataModel>();
public Form1()
{
InitializeComponent();
MyInit();
}
public void MyInit()
{
var userDataModel1 = new UserDataModel();
userDataModel1.Name = "Mike";
userDataModel1.Phone = "555-666";
userDataModel1.Home = new HomeDataModel();
userDataModel1.Home.StreetName = "MikeStreet";
userDataModel1.Home.GeoLocationX = 111;
userDataModel1.Home.GeoLocationY = 222;
var userDataModel2 = new UserDataModel();
userDataModel2.Name = "Jonathan";
userDataModel2.Phone = "777-888";
userDataModel2.Home = new HomeDataModel();
userDataModel2.Home.StreetName = "JonathanStreet";
userDataModel2.Home.GeoLocationX = 333;
userDataModel2.Home.GeoLocationY = 444;
userData.Add(userDataModel1);
userData.Add(userDataModel2);
// This works as usually:
/*
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Home";
comboBox1.DataSource = userData;
*/
// But this works not (either with comboBox1.DataBindings.Add() nor with BindingSource):
comboBox1.DisplayMember = "Home.StreetName";
comboBox1.ValueMember = "Home";
comboBox1.DataSource = userData;
// To drive me crazy, THAT shit works:
textBox1.DataBindings.Add("Text", userData, "Home.StreetName");
/*
So how can i use a String-Property of a SubObject as ComboBox-DisplayMember ???
BTW: To rebuild the sample, you only need a normal Forms Application and
then drop a ComboBox and a TextBox on it. Copy that code here, and run it.
*/
}
// To add this method - follow to my instructions below
private void ComboBoxFormat(object sender, ListControlConvertEventArgs e)
{
e.Value = ((UserDataModel)e.ListItem).Home.StreetName;
}
}
internal sealed class UserDataModel
{
public string Name { get; set; }
public string Phone { get; set; }
public HomeDataModel Home { get; set; }
}
internal sealed class HomeDataModel
{
public string StreetName { get; set; }
public int GeoLocationX { get; set; }
public int GeoLocationY { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要创建此方法(事件),请在[设计]模式下转到表单,右键单击组合框 - >属性.
在"属性"窗口的顶部,单击"事件"(闪电图标),
在下面的事件列表中查找格式(在Property Changed下)并输入一些事件名称,例如:ComboBoxFormat,然后按Enter键.而已 ;)
这是一个类似的问题。在标记的答案中,您可以看到他们设置了BindingContext,Form并且ComboBox它似乎对他们有用......
//...
comboBox1.BindingContext = this.BindingContext;
Run Code Online (Sandbox Code Playgroud)
希望有帮助...
| 归档时间: |
|
| 查看次数: |
10378 次 |
| 最近记录: |