FlowLayoutPanel -pobieranie wartości z dynamicznie tworzonych tekstboksów

0

Witam wszystkich.

Na początek chciałbym zaznaczyć że jestem początkujący w programowaniu, ze wszystkimi problemami staram się sobie radzić sam, ale niestety z jednym problemem nie mogę sobie poradzić. Dlatego proszę o pomoc.

Otóż mam do napisania program do generowania plików z losowymi wartościami, które są przechowywane w bazie danych. Problem w tym że losowanie ma być przygotowywane w generatorze losowań. Mam pomysł na okienko generatora losowań, w którym na podstawie wybranej wartości combobox aktualizuję zawartość FlowLayoutPanel- do tego miejsca wszystko działa jak należy.

Problem sprawia mi pobranie wartości z FlowLayoutPanel i zapisanie ich do DataTable, który przygotowałem wcześniej.
mógłby ktoś mi wyjaśnić jak przekazać zmienne i zapisać je do tabeli. Poniżej zamieszczam przykładowy kod który pokazuje strukturę programowanej formy.

Można to sobie wyobrazić jako losowanie filmów. W combobox wybiera się rok produkcji, w FlowLayoutPanel wyświetlane są rodzaje, przy każdym rodzaju jest Textbox. Następnie uzupełniam tekstboxy cyframi, a po kliknięciu przycisku dane są zapisywane w datatable. Przyszłościowo dane z datatable posłużą mi do tworzenia zapytań, których wynikiem mają być konkretne tytuły.

 
public partial class Kreator : Form
    {
        DataTable tablica = new DataTable("Tablica");
        
        public Kreator()
        {
            InitializeComponent(); 
            tablica.Columns.Add("lp", typeof(string));
            tablica.Columns.Add("liczba", typeof(string));
        }

        public void iD_ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            tablica.Rows.Clear();            
            flowLayoutPanel1.Controls.Clear();

            for (int i = 0; i < 10; i++) //funkcja wyświetla kontrolki
            {  
                Label lp = new Label();
                lp.Name = "lp"+i.ToString();
                lp.Text = (i+1).ToString() + ".";
                lp.Size = new System.Drawing.Size(20, 25);
                lp.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
                
                TextBox liczba = new TextBox();                    //zakładam że tutaj mogę w okienko wpisać jakąś wartość i
                liczba.Name="liczba"+ i.ToString();                //po kliknięciu przycisku button1 datatable zostanie zaktualizowana
                liczba.Text = tabelacount.Rows.Count.ToString();
                liczba.Size = new System.Drawing.Size(20, 20);

                DataRow dodaj_wiersz = tablica.NewRow();
                dodaj_wiersz["lp"] = i.ToString()+" .";
                dodaj_wiersz["liczba"] = "liczba"+ i.ToString();
                tablica.Rows.Add(dodaj_wiersz);

                flowLayoutPanel1.Controls.Add(lp);
                flowLayoutPanel1.Controls.Add(liczbapyt);
                flowLayoutPanel1.SetFlowBreak(liczbapyt, true);
    }
private void button1_Click(object sender, EventArgs e)
        {
         //tutaj nie wiem co wpisać żeby mi pobrało wartości z dynamicznie wygenerowanych textbox
         
         }

Po kliknięciu przycisku chciałbym pobrać wszystkie dane do datatable ze zaktualizowanymi wartościami w textbox. Bardzo proszę o pomoc.

0

Możesz to zrobić w pętli w której odwołujesz się do nazwy wygenerowanej kontrolki.

0

Mógłbyś podpowiedzieć w jaki sposób to zrobić. Pętla pętlą, mogę napisać, ale jak mam pobrać wartości, nie wiem czy mam się odwoływać do textboxów czy wartości uzyskać przez jakąś wbudowaną metodę flowlayoutpanel. Masz może jakiś link z przykładem, bo ja szukam i szukam ale nic nie mogę znaleźć.

0

Dla wszystkich którzy by chcieli wiedzieć, i którym może się to przydać:

 
private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < flowLayoutPanel1.Controls.Count; i+=2) 
            {
                    DataRow dodaj_wiersz = tablica.NewRow();
                    dodaj_wiersz["lp"] = flowLayoutPanel1.Controls[i].Text;
                    dodaj_wiersz["liczba"] = flowLayoutPanel1.Controls[i + 1].Text;
                    tablica.Rows.Add(dodaj_wiersz);
            }
        }

Być może jest prostsze rozwiązanie niż liczenie kontrolek, ale takie rozwiązanie dla mnie działa.

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