[英]Binding Data into a dynamically created textboxes in winforms using c#
[英]C# winforms Data bind textboxes to wcf request
我目前正在尝试将来自我的 Customer-Class 的请求解析为一个 winform。 我正在通过我构建的 WCF 服务获取内容。
这是Form1代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_search_Click(object sender, EventArgs e)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
int valueParsed;
if(txt_KNr.TextLength == 6)
{
if(Int32.TryParse(txt_KNr.Text.Trim(), out valueParsed))
{
Service svc = new Service();
WcfServiceGVO.CustomerData data = svc.Connect(txt_KNr.Text);
dict = svc.SplitData(data);
txt_FirstName.DataBindings.Add("Text", data, "FirstName", false, DataSourceUpdateMode.OnPropertyChanged);
txt_LastName.DataBindings.Add("Text", data, "LastName");
txt_Street.DataBindings.Add("Text", data, "Street");
txt_PLZ.DataBindings.Add("Text", data, "PLZ");
txt_Location.DataBindings.Add("Text", data, "Location");
lbl_ampErg.DataBindings.Add("Text", data, "Ampel");
}}
这是Reference.cs的一部分
public string LastName {
get {
return this.LastNameField;
}
set {
if ((object.ReferenceEquals(this.LastNameField, value) != true)) {
this.LastNameField = value;
this.RaisePropertyChanged("LastName");
}
}
}
它第一次工作,但第二次编译器说有 2 个绑定(所以我猜我的 DataBindings 不应该在 button_Click 中,而是在 InitializeComponent(); 下)如果我这样做,代码运行但不会更新文本框。 我需要更改什么,以便在我的请求从服务器获取数据后立即更新文本框? 如果属性改变,它应该更新接口。
选项 1 - 快速修复
一个快速的解决方法是在添加新的Binding
之前清除DataBindings
集合。
选项 2 - 在代码中使用 BindingSource
您可以在代码中创建一个BindingSource
并将模型的类型设置为DataSource
,然后在代码中对BindingSource
执行数据绑定。 然后在加载数据时,只需将数据分配给绑定源的DataSource
属性即可。 例如:
private BindingSource bindingSource1 = new BindingSource();
private void Form1_Load(object sender, EventArgs e)
{
bindingSource1.DataSource = typeof(Model1);
this.textBox1.DataBindings.Add("Text", bindingSource1, "Property1", true,
DataSourceUpdateMode.OnValidation);
this.textBox2.DataBindings.Add("Text", bindingSource1, "Property2", true,
DataSourceUpdateMode.OnValidation);
}
private void button1_Click(object sender, EventArgs e)
{
bindingSource1.DataSource = GetData();
}
选项 3 - 设计师支持
您可以在设计时使用BindingSource
组件进行数据绑定。 您可以在表单上放置一个BindingSource
组件,并在设计时将其数据源属性设置为所需的类型。 然后,您将使用设计器获得对数据绑定的设计时支持。 您可以将文本框和标签绑定到该绑定源。 然后在加载数据时,将数据分配给BindingSource
DataSource
属性就足够了。
更多信息:
我遇到的问题是要了解我可以将文本框拖放到 UI 中,以及如何实际使用它。 现在它似乎可以工作了,因为我在之前的代码中添加了以下代码:
private void btn_search_Click(object sender, EventArgs e)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
int valueParsed;
if(txt_KNr.TextLength == 6)
{
if(Int32.TryParse(txt_KNr.Text.Trim(), out valueParsed))
{
Service svc = new Service();
WcfServiceGVO.CustomerData data = svc.Connect(txt_KNr.Text);
customerDataBindingSource.DataSource = data;
//txt_FirstName.DataBindings.Add("Text", data, "FirstName");
//txt_LastName.DataBindings.Add("Text", data, "LastName");
//txt_Street.DataBindings.Add("Text", data, "Street");
//txt_PLZ.DataBindings.Add("Text", data, "PLZ");
//txt_Location.DataBindings.Add("Text", data, "Location");
//lbl_ampErg.DataBindings.Add("Text", data, "Ampel");
}
}
关键是要明白我可以只使用我的 servicedata 作为数据源! 感谢 Reza 的大力帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.