2011-08-01 69 views
0

如何使用MVP(Model-View-Presenter)填充ComboBox和DataGridView。其實我有這樣的事情:使用MVP填充Combobox和DataGridView

視圖的基類:

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; 
} 

我不知道如何填充組合框和Datagridview!

PD:由於喬希用於查看和演示基類(MVP Base Class

致謝代碼!!

回答

1

您需要創建一個屬性,您將使用該屬性爲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; } 

} 

然後在具體的視圖(該imolements的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; 
    } 
} 
+0

嗨馬西米利亞諾,感謝您的幫助,我不知道這是如此簡單,非常感謝您的幫助! – fcartu

+0

嗨馬西米利亞諾,你能解釋一下爲什麼你把一個主持人當作genric而不僅僅是簡單的基類嗎?意味着我將它作爲通用程序的優勢還是它的工作原理? – 0cool

+0

YourPresenter:Presenter 我對這條線感到困惑,我們正在通過IAdministrarUsuariosView接口到泛型類 - public class Presenter where TView:class,IView – 0cool