C#winforms数据绑定文本框到wcf请求
我目前正试图将来自客户类的请求解析为winform。 我通过我建立的WCF服务获取内容 以下是Form1代码:C#winforms数据绑定文本框到wcf请求,c#,.net,winforms,C#,.net,Winforms,我目前正试图将来自客户类的请求解析为winform。 我通过我建立的WCF服务获取内容 以下是Form1代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_search_Click(object sender, EventArgs e) { Dictionary<s
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");
}}
它第一次工作,但第二次编译器说有2个绑定(所以我想我的数据绑定不应该在按钮中,而是在InitializeComponent()下)
如果我这样做,代码将运行,但不会更新文本框。我需要更改什么,以便在我的请求从服务器获取数据时立即更新文本框?如果属性发生更改,则应更新界面。选项1-快速修复 快速修复方法是在添加新的
绑定之前清除数据绑定
集合
选项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
组件,并在设计时将其数据源属性设置为所需的类型。然后,您将使用designer获得数据绑定的设计时支持。您可以将文本框和标签绑定到该绑定源。然后在加载数据时,将数据分配给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");
}
}
private void btn\u search\u单击(对象发送者,事件参数e)
{
Dictionary dict=新字典();
int值解析;
如果(txt_KNr.TextLength==6)
{
if(Int32.TryParse(txt_KNr.Text.Trim(),out valueParsed))
{
服务svc=新服务();
WcfServiceGVO.CustomerData=svc.Connect(txt_KNr.Text);
customerDataBindingSource.DataSource=数据;
//txt_FirstName.DataBindings.Add(“Text”,数据,“FirstName”);
//txt_LastName.DataBindings.Add(“文本”,数据,“LastName”);
//txt_Street.DataBindings.Add(“Text”,数据,“Street”);
//添加(“文本”,数据,“PLZ”);
//txt_Location.DataBindings.Add(“文本”,数据,“位置”);
//lbl_ampErg.DataBindings.Add(“文本”,数据,“Ampel”);
}
}
关键是要理解我可以将我的servicedata用作数据源!感谢Reza提供的巨大帮助!第一个选项肯定会解决您的问题。对于第二个选项,请阅读此链接:特别是这一部分,步骤非常简单,只要您将服务引用添加到项目中,它就会将所需类型添加到数据中Source
窗口。您还可以手动将项目添加到窗口中。然后,您甚至可以使用CustomerData
附近的下拉菜单拖动窗口,您可以选择Details
模式,拖动CustomerData
并将其拖放到表单上,您将看到它放置了一个BindingSource
并为您设置数据绑定如果需要,您可以更改它们。然后在运行时获取数据并分配到BindingSource
的DataSource
就足够了。我之前已经尝试了第二种方法,并按照教程进行了操作,但不起作用。它没有更新任何内容:“这将生成样板代码,向用户显示数据存储中产生的数据。[…]如果在应用程序上按F5,则基础数据库中的数据将显示在窗体控件中。”。"我所描述的方法与数据源
完全无关。它与WCF完全相关,并使用您的模型类。我已经多次使用过这种方法,而且它完全可靠且快速。如果您还记得我们使用数据集
的方法,这种方法确实与此类似,但使用的是WCF服务和模型日期答案包含您可以使用的所有选项。所有选项都工作正常,您可以选择其中任何一个。如果您有兴趣自己使用基于代码的配置,则第二个选项适合您。第三个选项对您执行相同的操作,但有设计器支持。第一个选项也是最简单的:)
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");
}
}