MVP Winforms和文本框组合框值

凯文

我有一个组合框,其中有一个列表作为数据源。此列表包含具有其属性(名称,地址等)的对象(客户)。当我选择组合框的一个项目时,我想将信息(地址,邮政编码...)传递给表单上的某些文本框。在我的测试1tier应用程序中,这是正确的。但是我正在开发的主要应用程序是基于MVP的(我对此有自己的看法)。我面临的问题是铸造。由于我的观点不了解我的模型,因此不应允许我使用(客户)。string address = ((Customers)comboBox1.SelectedItem).CustomerAddress;

1层测试代码:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    //getCustomers((int)comboBox1.SelectedValue);
    //txtAddress.Text =Convert.ToString( comboBox1.SelectedValue);
    Customers p = (Customers)comboBox1.SelectedItem;
    string s = comboBox1.SelectedItem.ToString();
    string address = ((Customers)comboBox1.SelectedItem).CustomerAddress;
    txtAddress1.Text = address;
}

private void Form3_Load(object sender, EventArgs e)
{
    using (var emp = new EmployerEFEntities())
    {
        var query = from customers in emp.Customers
                    select customers;

        comboBox1.DisplayMember = "CustomerName";
        comboBox1.ValueMember = "CustomerID";
        comboBox1.DataSource = query.ToList();
    }
}

我已经研究了几天,但没有成功。我希望有人能给我正确的方向。

实际应用程序的代码:

看法:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    txtName.Text = comboBox1.SelectedValue.ToString();
}

private void CustomerView_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = customerPresenter.getCustomers();
    comboBox1.DisplayMember = "CustomerName";
    comboBox1.ValueMember = "CustomerId";
}

主持人:

public List<tbl_customer> getCustomers()
{
    using (var customers = new DBCrownfishEntities())
    {
        var customer = from c in customers.tbl_customer
                       select c;

        return customer.ToList();
    }
}
安迪

这只是实现它的一种方法。您的MVP模式可能看起来有所不同。在此实现中,视图了解演示者。有关MVP的更多信息,请点击此处

您可以将Presenter用作客户的包装器:

public interface IPresenter
{
    void Init();
    void SetSelectedCustomer(int customerId);
    IEnumerable GetCustomers();
    string FirstName { get; set; }
    string LastName { get; set; }
    string Address { get; set; }
}

演示者必须实现INotifyPropertyChanged(并在属性设置器中调用OnPropertyChanged)。

public class Presenter : IPresenter, INotifyPropertyChanged
{
    private readonly Repository _repository;
    private string _firstName;
    private string _lastName;
    private string _address;
    private Customer _currentCustomer;

    public Presenter(Repository repository)
    {
        _repository = repository;
    }

    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (_firstName == value) return;
            _firstName = value;
            OnPropertyChanged();
        }
    }

    public string LastName
    {
        get { return _lastName; }
        set
        {
            if (_lastName == value) return;
            _lastName = value;
            OnPropertyChanged();
        }
    }

    public string Address
    {
        get { return _address; }
        set
        {
            if (_address == value) return;
            _address = value;
            OnPropertyChanged();
        }
    }

    public IEnumerable GetCustomers()
    {
        return _repository.GetAllCustomers();
    }

    public void Init()
    {
        var result = _repository.GetAllCustomers();
        SetSelectedCustomer(result[0].Id);
    }

    public void SetSelectedCustomer(int customerId)
    {
        var customer = _repository.GetCustomerById(customerId);
        FirstName = customer.FirstName;
        LastName = customer.LastName;
        Address = customer.Address;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

这是视图的样子:

public partial class Form1 : Form
{
    private IPresenter _presenter;
    private bool _initialized;

    public Form1(IPresenter presenter)
    {
        InitializeComponent();           
        _presenter = presenter;
        _presenter.Init();
        SetComboBoxData(_presenter.GetCustomers());
        _initialized = true;
    }

    public void SetComboBoxData(IEnumerable data)
    {
        comboBox1.DataSource = data;
        comboBox1.ValueMember = "Id";
        comboBox1.DisplayMember = "FirstName";
    }

    private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        if (!_initialized) return;
        _presenter.SetSelectedCustomer((int)comboBox1.SelectedValue);
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {
        textBox1.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.FirstName)));
        textBox2.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.LastName)));
        textBox3.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.Address)));
    }
}

您可以在组合框中的SelectedIndexChanged事件中的Presenter上设置选定的CustomerId:

_presenter.SetSelectedCustomer((int)comboBox1.SelectedValue);

Presenter中的SetSelectedCustomer方法(或SelectedCustomerChanged事件的EventHandler)选择具有给定CustomerId的Customer并设置FirstName,LastName和Address:

public void SetSelectedCustomer(int customerId)
{
    var customer = _repository.GetCustomerById(customerId);
    FirstName = customer.FirstName;
    LastName = customer.LastName;
    Address = customer.Address;
}

您应该在Form_Load中为TextBoxes进行绑定:

textBox1.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.FirstName)));
textBox2.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.LastName)));
textBox3.DataBindings.Add(new Binding("Text", _presenter, nameof(_presenter.Address)));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在文本框中显示所选行MVP C#

来自分类Dev

如何在VB中将组合框和文本框值相乘?

来自分类Dev

Ncurses和文本框

来自分类Dev

根据所选组合框值更改文本框的值

来自分类Dev

Winforms中的MVP模式-处理事件

来自分类Dev

MVP模式WinForms:如何正确更新UI?

来自分类Dev

PHP:检查选择值和文本框!= NULL

来自分类Dev

C#WPF滑块值和文本框

来自分类Dev

在 div 选择上链接 div 和文本框值

来自分类Dev

使用组合框类别和文本框javascript进行过滤

来自分类Dev

将项目从数据库添加到组合框和文本框

来自分类Dev

基于多个参数的子表单过滤(组合框和文本框)

来自分类Dev

确保用户表单上的组合框和文本框不为空

来自分类Dev

WPF:如何显示文本块和文本框流入的组合?

来自分类Dev

Internet Explorer和文本框

来自分类Dev

计算列表视图和文本框

来自分类Dev

CSS的搜索按钮和文本框

来自分类Dev

标签和文本框的对齐

来自分类Dev

XAML - 标签和文本框的样式

来自分类Dev

如何使用根据文本框B和文本框C的值计算出的值填充文本框A?

来自分类Dev

如何使用根据文本框B和文本框C的值计算出的值填充文本框A?

来自分类Dev

获取jquery中动态添加的选择框和文本框的值

来自分类Dev

组合框阴影和文本渐变

来自分类Dev

使用if语句将组合框值与两个文本框值进行比较

来自分类Dev

如何基于html页面中的组合框中的值填充文本框的值

来自分类Dev

WinForms的MVP模式-访问用户输入的正确方法?

来自分类Dev

使用下拉框和文本框进行计算

来自分类Dev

子句的文本框值

来自分类Dev

文本框值求和

Related 相关文章

热门标签

归档