Hvala na svim odgovorima.
Ja sam uradio nesto pa vi procenite jel to ispravno.
Ono sto sam ja uradio iz svoje glave pre nego sto sam dobio odgovore je sledece:
U napravio sam UserControl koji sadrzi layout: left za filtriranje podataka i middle panel koji prikazuje DataGridView sa podacima, top sa informacijama en title i bottom sa BindingNavigation.
UserControl sadrzi propertije kojima iz neke forme prosledjujem DataSource za datagridview, polja za filtriranje List<String> koja kasnije kroz loop generisem dinamicki Labele i TextBox-ove zbog pretrage grida i property za Title.
Za svaki sifrarnik ono sto trebam jeste da napravim blanko formu i da dodam UserControl i da roknem jedan DOCK FILL.
Nakon toga u konstruktoru setujem DataSource, Filtere i Title.
Primera radi za formu artikal:
Code:
public Artikal()
{
InitializeComponent();
List<string> filteri = new List<string>();
filteri.Add("SIFRA");
filteri.Add("NAZIV");
filteri.Add("MP CENA");
filteri.Add("VP CENA");
FormUserControl = new TestUserControl(filteri);
FormUserControl.Dock = DockStyle.Fill;
FormUserControl.gridDataSource = GetTable();
FormUserControl.TitleLabel = "Artikli";
this.Controls.Add(FormUserControl);
}
Controls za filtere se generisu dinamicki uz pomoc
List<string> filteri
U roku od 3 min dobijam full formu sa potrebnim podacima i filterima. Jeste da na samom startu izgubim dosta vremena da kreiram taj usercotrol kako treba ali nakon toga sve se kreira u 3 koraka.
Evo usercontrol koji je srce svega:
Code:
public partial class TestUserControl : UserControl
{
private DataTable _dataSource;
private BindingSource _bs = new BindingSource();
private List<string> _filters;
private TextBoxFormFilter[] controls; // textbox and label usercontrol
public DataTable gridDataSource
{
get { return _dataSource; }
set { _bs.DataSource = value; }
}
public string TitleLabel
{
get { return formTitleLbl.Text; }
set { formTitleLbl.Text = value; }
}
public TestUserControl(List<String> filters)
{
InitializeComponent();
_filters = filters;
controls = new TextBoxFormFilter[_filters.Count];
dataGridView1.DataSource = _bs;
bindingNavigator1.BindingSource = _bs;
SetupFilters();
}
public void SetupFilters()
{
int space = 20;
int count = 0;
for(int i = 0; i < _filters.Count; i++)
{
count += 1;
controls[i] = new TextBoxFormFilter();
controls[i].SetLabelValue(_filters[i]);
controls[i].textBoxFilter.Name = "TextBox" + count.ToString();
controls[i].Location = new Point(5, 15 + space);
space += 50;
}
for(int i = 0; i < _filters.Count; i++)
{
filterPanel.Controls.Add(controls[i]);
}
}
private void SearchBtn_Click(object sender, EventArgs e)
{
string s = String.Empty;
BindingSource bs = new BindingSource();
for (int i = 0; i < _filters.Count; i++)
{
string value = controls[i].GetTextBoxValue();
if (!string.IsNullOrWhiteSpace(value) && !string.IsNullOrEmpty(value))
{
s = value;
bs.Filter = dataGridView1.Columns[2].ToString() + " LIKE '%" + s + "%'";
}
}
dataGridView1.DataSource = bs;
//MessageBox.Show(s);
}
Ovo sve radi super i eventi mogu da se pohvataju. TextBoxFormFilter je dodatna kontrola koja kreira dinamicki label i textbox. TextBoxFormFilter kontrola sadrzi label i textbox i kroz FOR petlju kreiram filtere.
Mada me predlog @Dusan Kondic za CRUID mozda vise privlaci.
Obrni okreni ja ovde opet moram da kreiram za svaki sifrarnik praznu formu (frmArtikli, frmKupci, frmDobavljaci) i svakoj da dodajem user control koji sam kreirao da bi prikazao informacije.
Mozda kada bi napravio jednu UNIQUE formu kojoj cu kao ste je receno samo da prosledim ime tabele i na osnovu toga da se ona sama generise? Samim tim bi izbegao kreiranje blanko tabela.
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.