Tablica polaczeń, elementów takich samych lub kolejnych

0

Cześć wszsytkim.

Mam taki kod:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\UtworzProjekt\projekty.accdb");
                {
                    using (OleDbCommand cmd = new OleDbCommand("SELECT Nazwa_uzytkownika FROM uzytkownicy"))
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.Connection = my_con;

                        my_con.Open();
                        DropDownList1.DataSource = cmd.ExecuteReader();
                        DropDownList1.DataTextField = "Nazwa_uzytkownika";
                        DropDownList1.DataBind();
                        my_con.Close();

                        my_con.Open();
                        DropDownList2.DataSource = cmd.ExecuteReader();
                        DropDownList2.DataTextField = "Nazwa_uzytkownika";
                        DropDownList2.DataBind();
                        my_con.Close();

                        my_con.Open();
                        DropDownList3.DataSource = cmd.ExecuteReader();
                        DropDownList3.DataTextField = "Nazwa_uzytkownika";
                        DropDownList3.DataBind();
                        my_con.Close();
                    }
                }

                //Add blank item at index 0.
                DropDownList1.Items.Insert(0, new ListItem("", ""));
                DropDownList2.Items.Insert(0, new ListItem("", ""));
                DropDownList3.Items.Insert(0, new ListItem("", ""));

            }
        }

Czy jest możliwość uproszczenia kodu w taki sposób, aby nie deklarować wyrażeń takich samych lub będących kolejnymi następującymi po sobie elementami, a by zawierały się w jakimś rodzaju tablicy (listy) według zasady:


my_con.Open();
tablica1 (DropDownList1, DropDownList2, DropDownList3).DataSource;
tablica1 = cmd.ExecuteReader();
tablica2 (DropDownList1, DropDownList2, DropDownList3).DataTextField;
tablica2 = "Nazwa_uzytkowanika;
tablica3 (DropDownList1, DropDownList2, DropDownList3).DataBind();
my_con.Close();

i 

tablica4 (DropDownList1, DropDownList2, DropDownList3).Items.Insert(0, new ListItem("", ""));
0

Pytanie - po co ci trzy razy to samo?

0

@AdamWox:

Bo to działania na 3 różnych DropDownList'ach

0

To akurat wiem, ale co próbujesz uzyskać (końcowo) takim zabiegiem? Powiązujesz do czegoś użytkowników?

0

@AdamWox:

Każdy DropDownList przypisuje rolę osoby w projekcie np z DropDownList1 wybiera się kto będzie aktorem, z DropDownList2 to, kto będzie statystą, a DropDownList3, to kto z tej samej listy będzie np narratorem. Po wybraniu różnych (lub może być że tych samych) pozycji w projekcie zapisywać miałoby się w BD informacje w 3 różnych kolumnach: Aktor, Statysta, Narrator

0

A więc tak - z tego co widzę to to jest WebForms + Access (podziwiam) . Nie mam z tym doświadczenia i nie bardzo ogarniam kontrolki w tej technologii. Jedyne co bym zmienił to ciągłe otwieranie i zamykanie połączenia.

                using (OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\UtworzProjekt\projekty.accdb"))
                {
                    my_con.Open(); // Nie jestem pewny, czy jak jest using to potrzebujesz Open(), spróbuj bez.
                    using (OleDbCommand cmd = my_con.CreateCommand())
                    {
                        cmd.CommandText = "SELECT Nazwa_uzytkownika FROM uzytkownicy";
                        var myData = cmd.ExecuteReader();

                        DropDownList1.DataSource = myData;
                        DropDownList1.DataTextField = "Nazwa_uzytkownika";
                        DropDownList1.DataBind();
                        DropDownList2.DataSource = myData;
                        DropDownList2.DataTextField = "Nazwa_uzytkownika";
                        DropDownList2.DataBind();
                        DropDownList3.DataSource = myData;
                        DropDownList3.DataTextField = "Nazwa_uzytkownika";
                        DropDownList3.DataBind();
                    }
                }

Co do reszty (bindowania danych), to będzie musiał się wypowiedzieć ktoś starszy, i nie mam na myśli stażu choć może to iść ze sobą w parze.

0

Dlaczego "podziwiasz"? Czy to coś niezwykłego lub złego?

0

Pobierz dane tylko raz, a potem używaj tej samej listy do każdego comboboxa

0

@Neosphoros:

A czy mógłbyś napisać co sprawia, że asp net jest taki zły, a co, że technologie które wymieniłeś są takie dobre? Z tego co zauważyłem, to np Razor nie dodaje, żadnej dodatkowej funkcjonalności, której nie obsługiwałby "czysty" asp net. Razor jedynie uprasza pisownie, to wszystko. Trudno więc mówić, że asp net jest przestarzały bo działać oba programy i tak będą w identyczny sposób.

2

@Neosphoros: Fakt że producent tych technologii oficjalnie ich nie będzie wspierał w przyszłości zaleca stosować nowoczesne technologie do nowych projektów.

https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core

https://dotnet.microsoft.com/en-us/platform/support/policy/aspnet

Dodajmy też że nowsze technologie mają więcej funkcjonalności łatwiej do zaimplementowania, są wydajniejsze bezpieczniejsze i można dużo materiałów i pomocy znaleźć do nich, jeżeli ktoś zaczyna od początku.

Oczywiście WebForm to bardzo stara i znana technologia jednak czy budujesz dom używając metod sprzed 20 lat czy raczej narzędzia nowoczesne?

Oczywiście i tak finalnie decydują różne czynniki, przykładowo masz wiedze i nie chcesz tracić czasu na naukę tylko zależy Ci na małych kosztach i czasie to robisz w tym czym umiesz ;-)

3

Definicja ASP.NET z Wikipedii - zbiór technologii opartych na frameworku zaprojektowanym przez firmę Microsoft.. ASP.NET to zbiór technologii i jedną z nich jest WebForms, który nie jest już rozwijany i nie ma sensu się go uczyć. W miejsce WebForms weszło MVC. Razor nie jest rozszerzeniem stricte ASP NET tylko HTML i pozwala na osadzanie kodu C# w widoku strony. Owszem, WebForms też na to pozwala, ale Razor jest szybszy, czytelniejszy i dalej rozwijany.

Z ciekawości wpisałem sobie na pracuj.pl czy jest jakaś robota - wpisując webforms jest ich 24, wpisując mvc .net jest ich 386. Uważasz, że webforms spełnia twoje wymagania i radzisz sobie w nim? To pisz. Ja ciebie tylko informuje, że takie technologie jak webforms, czy baza danych w Accesie są już przeżytkiem. Tak się pisało 20 lat temu i te technologie prędzej czy później przestaną istnieć.

Microsoft kładzie nacisk na Razor Pages, WebAPI + Angular/Vue/React oraz Blazor.

0

@AdamWox:

Aplikacje, które tworze - tworzę hobbistycznie więc nic mnie nie zobowiązuje. Według mnie kod asp net jest bardziej przejrzysty i zrozumiały dlaczego więc miałbym zmieniać coś co działa na coś co wcale nie działa lepiej, a posiada jedynie zmienioną pisownię? Może kiedyś się nauczę, ale Razor itd nie ma na razie niczego innowacyjnego czego nie dało by się zrealizować za pomocą czystego asp net i myślę, że do czasu kiedy możliwości asp net się skończą to stworzone zostanie coś co zastąpi i asp net i wszystkie wynalazki typu Razor.

0

@Neosphoros: problemy WebFormsów:

  1. ogromne ilości nadmiarowego kodu HTML i JS przesyłanego na widok;
  2. uciążliwe zarządzanie stanem mogące prowadzić do wycieków pamięci;
  3. konieczność nauczenia się i pamiętania o cyklu życia strony, aby nie odwoływać się do kontrolek zbyt wcześnie albo zbyt późno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1