使用MVP填充Combobox和DataGridView

时间:2011-08-01 15:07:38

标签: c# winforms visual-studio-2005 .net-2.0 mvp

如何使用MVP(Model-View-Presenter)填充ComboBox和DataGridView。其实我有这样的事情:

View基类:

public interface IView
{
    event EventHandler Initialize;
    event EventHandler Load;
}

演示者基类:

public class Presenter<TView> where TView : class, IView
{
    private TView view;
    public TView View { get { return view; } private set { view = value; } }

    public Presenter(TView view)
    {
        if (view == null)
            throw new ArgumentNullException("view");

        View = view;
        View.Initialize += OnViewInitialize;
        View.Load += OnViewLoad;
    }

    protected virtual void OnViewInitialize(object sender, EventArgs e) { }

    protected virtual void OnViewLoad(object sender, EventArgs e) { }
}

具体观点:

public interface IAdministrarUsuariosView : IView
{

    string NombreUsuarioABuscar {get; set;}

    List<Perfil> ListaPerfiles {get; set;}

    event EventHandler BuscarUsuarioPorNombre;
    event EventHandler BuscarUsuarioPorPerfil;
}

我不知道如何填充ComboBox和Datagridview!

PD:感谢Josh提供了View和Presenter基类的代码(MVP Base Class

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要创建一个属性,用于设置ComboBox和DropdownList的数据源。

只是给你一个例子(你需要改进这个代码,但它显示了你如何做到这一点)

在你看来:

//this is just a template to simulate a datasource item
public class TestItem
{
    public int Id { get; set; }
    public string Description { get; set; }
}

public interface IAdministrarUsuariosView : IView
{

    string NombreUsuarioABuscar { get; set; }

   // List<Perfil> ListaPerfiles { get; set; }

    event EventHandler BuscarUsuarioPorNombre;
    event EventHandler BuscarUsuarioPorPerfil;
    List<TestItem> SetComboBox { set; }
    List<TestItem> SetGridView { set; }

}

然后在具体视图中(使用IAdministrarUsuariosView的winform

public class YourView:IAdministrarUsuariosView
{
    public string NombreUsuarioABuscar
    {
        get { throw new NotImplementedException(); }
        set { throw new NotImplementedException(); }
    }

    public event EventHandler BuscarUsuarioPorNombre;
    public event EventHandler BuscarUsuarioPorPerfil;

    public List<TestItem> SetComboBox
    {
        set
        {
            ComboBox.DataSource = value;
            //your need to specify value and text property
            ComboBox.DataBind();
        }
    }

    public List<TestItem> SetGridView
    {
        set
        {
            GridView.DataSource = value;
            //your need to specify value and text property
            GridView.DataBind();

        }
    }
}

然后您的演示者应如下所示:

public class YourPresenter:Presenter<IAdministrarUsuariosView>
{

    public YourPresenter(IAdministrarUsuariosView view) : base(view)
    {
    }

    protected override void OnViewLoad(object sender, EventArgs e)
    {
        List<TestItem> listResult = GetListItem();
        this.View.SetComboBox = listResult;
        this.View.SetGridView = listResult;
    }
}