Witam,
Zakręciłem się przy próbie umieszczenia comboBox'a w szablonie MVP.
Umieszczam comboBox ma formie. Forma wystawia interface na podstawie którego klasa presenter buduje obiekt. Poprzez interface jest wystawiany obiekt(model) z formy który powinien pobrać/oddać dane. Nie może on jednak (chyba) zawierać obiektu comboBox tylko ewentualnie dane które powinien otrzymać. Teraz nie wiem czy zbudować szablonowy obiekt na wzór comboBoxa który zawiera dataSource, DisplayMember, ValueMember i SelectedValue. Podać mu dane w Modelu i poprzez presentera przekazać do właściwego comboBoxa? Chociaż też nie bo interface nie wystawia comboBox'a. Help :-)
Chyba, że mogę wystawić comboBox'a poprzez interface do presentera - wtedy prościzna ;-)
W takim przypadku byłoby tak:
Model
public class RaportowanieModel : EntityBase
{
public int miesiac { get; set; }
public int rok { get; set; }
public ComboBox rokComboBox = new ComboBox();
public ComboBox miesiacComboBox = new ComboBox();
public DataTable raportyWyborDanychDT { get; set; }
public DataRow raportyWyborDanychCurrentDR { get; set; }
}
Presenter
public void Initialize(IRaportowanie view)
{
zapytanieDataGrid.utworzSELECT("RaportyWyborDanychCalosc_v",
new List<string> { "*" }, new string[] { "month(dataWaluty)=? AND year(dataWaluty)=?", "dataWaluty DESC" });
zapytanieDataGrid.dodajParametr("@P1", "int");
zapytanieDataGrid.dodajParametr("@P2", "int");
view.raportowanieModel = new Model.RaportowanieModel();
}
public void load(IRaportowanie view)
{
Pomocne.ComboBoxUstaw.rok(view.raportowanieModel.rokComboBox);
Pomocne.ComboBoxUstaw.miesiac(view.raportowanieModel.miesiacComboBox);
}
View
public Raportowanie()
{
InitializeComponent();
presenter.Initialize(this);
raportowanieModel.rokComboBox = this.rokComboBox;
raportowanieModel.miesiacComboBox = this.miesiacComboBox;
}
private void Raportowanie_Load(object sender, EventArgs e)
{
presenter.load(this);
presenter.daneDoDataGrid(this);
}
#region IRaportowanie
public RaportowanieModel raportowanieModel
{
get { return this.raportowanieModelBindingSource.Current as RaportowanieModel; }
set { this.raportowanieModelBindingSource.DataSource = value; }
}
Model -> oczekuje obiektów comboBox
Presenter -> przy wywołaniu Initializera powołuje do życia model
View -> konstruktor przekazuje referencję ze swoich comboBox'ow do tych z modelu
View -> Load pobiera poprzez prezentera dane do comboBox
działa ale mi się nie podoba :/
Pozdrawiam,
Zoritt