» »

[C#,SQL]

[C#,SQL]

max00slo ::

Pozdravljeni

Sem seveda bolj začetnik in imam težave.

Ustvarjam mini bazo v kateri imam več tabel (pošte, krajevne skupnosti, osebe, naslovi,...).
Kot našteto je npr. v tabeli pošt ID pošter ter stolpec ime pošte (npr. 1000 Ljubljana).
V tabeli Naslovi imam npr. eno vrstico takšno

ID | Naziv ulice | Hišna štev. | ID Pošte
3 | Ulica Padlih | 12 B | 32 


Kako bi najlažje prikazal uporabniku za pregled ter urejanje podatke iz tabele.
Sedaj uporabljam datagridview le za prikaz ter izbiro podatkov, katere mi prenese v txtboxe ali cmboboxe ki so povezani s svojimi tabelami.

Par izsekov iz različnih funkcij
 
DataSet ds = new DataSet();
        DataSet ds1 = new DataSet();
        DataSet ds2 = new DataSet();
        SqlConnection cs = new SqlConnection("Data Source=baza..; Initial Catalog=dbbb; Integrated Security=TRUE");
        SqlDataAdapter da = new SqlDataAdapter();
        SqlDataAdapter da1 = new SqlDataAdapter();
        SqlDataAdapter da2 = new SqlDataAdapter();
        


        BindingSource bs = new BindingSource(); // naslovi
        BindingSource bs1 = new BindingSource(); // posta
        BindingSource bs2 = new BindingSource(); // krajevne skupnosti


        private void frmNaslovi_Load(object sender, EventArgs e)
        {
            da.SelectCommand = new SqlCommand("SELECT * FROM tabNASLOVI", cs);
            da1.SelectCommand = new SqlCommand("SELECT * FROM tabPOSTE", cs);
            da2.SelectCommand = new SqlCommand("SELECT * FROM tabKS", cs);

            ds.Clear();
            ds1.Clear();
            ds2.Clear();

            da.Fill(ds);
            da1.Fill(ds1);
            da2.Fill(ds2);

            dataGridView1.DataSource = ds.Tables[0];

            da1.TableMappings.Add("Table", "tabPOSTE");
            da1.Fill(ds1); // napolni poste
            da2.TableMappings.Add("Table", "tabKS");
            da2.Fill(ds2);
            /*DataViewManager dviewmanager1 = ds1.DefaultViewManager;
            DataViewManager dviewmanager2 = ds2.DefaultViewManager;*/

            cmbPostaID.DataSource = ds1;
            cmbPostaID.DisplayMember = "tabPOSTE.POSTE_ID";

            /*comboPosta.DataSource = dviewmanager1;
            comboPosta.DisplayMember = "tabPOSTE.POSTE_POSTA";
            txtPostaID.DataBindings.Add("Text", dviewmanager1, "tabPOSTE.POSTE_ID");*/

            comboPosta.DataSource = ds1;

            comboPosta.DisplayMember = "tabPOSTE.POSTE_POSTA";
            
            

            /*comboKS.DataSource = dviewmanager2;
            comboKS.DisplayMember = "tabKS.KS_KS";
            txtKSid.DataBindings.Add("Text", dviewmanager2, "tabKS.KS_ID");*/
            comboKS.DataSource = ds2;
            comboKS.DisplayMember = "tabKS.KS_KS";

            cmbKsID.DataSource = ds2;
            cmbKsID.DisplayMember = "tabKS.KS_ID";

            cs.Close();



            bs.DataSource = ds.Tables[0];
            //if (txtObcina.DataBindings.Count != 0)
            txtUlica.DataBindings.Add(new Binding("Text", bs, "NASLOVI_Ulica"));
            txtHisnaSt.DataBindings.Add(new Binding("Text", bs, "NASLOVI_Hisna"));
            /*txtPostaID.DataBindings.Add(new Binding("Text", bs1, "POSTE_ID"));
            comboPosta.DataBindings.Add(new Binding("Text", bs1, "POSTE_POSTA"));*/
            //txtKSid.DataBindings.Add(new Binding("Text", bs2, "KS_ID"));

            osveziDG();
}

        private void osveziDG()
        {

            dataGridView1.ClearSelection();
            if (dataGridView1.Rows.Count > 0)
                dataGridView1.Rows[bs.Position].Selected = true;
            if (dataGridView1.Rows.Count > 0)
                bs.Position = dataGridView1.CurrentRow.Index;
            else
                bs.Position = 0;

            lblZapisi.Text = "Zapis " + bs.Position + " od " + (bs.Count - 1);
            ds.Clear();
            da.Fill(ds);

        }


---


        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            bs.Position = dataGridView1.CurrentRow.Index;
            
            cmbPostaID.SelectedIndex = cmbPostaID.FindStringExact(dataGridView1.Rows[e.RowIndex].Cells[3].FormattedValue.ToString());
            cmbKsID.SelectedIndex = cmbKsID.FindStringExact(dataGridView1.Rows[e.RowIndex].Cells[4].FormattedValue.ToString());
            bs1.Position = dataGridView1.CurrentRow.Index;
            bs2.Position = dataGridView1.CurrentRow.Index;
        }



V glavnem - vem, zmeda, ki deluje do neke mere. Rad bi poenostavil uporabniško izkušnjo s tem, da bi, če se da, ob sql queryu poleg pridobitve (glej prvi del kode) ID številke neke druge tabele takoj tudi izpisati še pripadajoče podatke - stolpce.

Hvala vsem za ogled/odgovor ter se opravičujem za zmeden zapis. (nenaspanost zadnjih dni)

lp,m

max00slo ::

Podvprašanje - Kako združiti prikaz podatkov querya v ComboBoxu. Združiti == prikazati iz tabele dva stolpca?
cmbNaslov.DataSource = ds1;
cmbNaslov.DisplayMember = "tabNASLOVI.NASLOVI_Ulica";
// OZIROMA primitivno bi najraši zadevo rešil takole, ampak ne gre:
// cmbNaslov.DisplayMember = "tabNASLOVI.NASLOVI_Ulica" + " " + "tabNASLOVI.NASLOVI_Hisna";

detroit ::

Ne razumem ni enga vprašanja:P

mogoče drugi bi bil tak da select napišeš:
select stolpec1 as x, stolpec2 as y, stolpec3 + stolpec4 as z from kakakadu


p.s. čemu za vsako tabelo svoj lastni ds?
Skero

max00slo ::

Ja vem, DS izrabljam za čisto brezveze. Lahko enega pa nafilam tabele če je ista baza v prihodnje spremenim.

Se mi je zdelo da sem nejasen. Problem se mi pojavi ker imam za urejanje vsake od tabel posamezen form. In seveda se mi npr. pri formi za urejanje UPORABNIKOV pojavi poleg pravilno izpisanega imena v človeško berljivi obliki še ID npr. naslova? V tabeli naslovi imam pa ID, Naslov, Hišna, Pošta stolpce. Za urejanje imam nastavljene comboboxe (datagridview vezan na databinding cmbbx) ampak če se želi narediti nov vnos UPORABNIKA, mora uporabnik vnesti ime uporabnika ter izbrati enega izmed naslovov, ki so že vnaprej nastavljeni v drugi tabeli. In ker imam (ja, smeh :) tri različne comboboxe za nastavitev Naslove (torej neke ulice), ima uporabnik programa na voljo za izbiro ID,ULICO ter HIŠNO številko. Najboljše bi bilo da bi imel vse v enem ali zgolj ulica+hišna skupaj.

max00slo ::

Making it simple kot primer:
Customers: id, name
Products: id, name
Orders: id, customerId, productId

Prikaz:
Order Id | Product name | Customer Name 
id

JanOlMajti ::

- id in id pošte nepotrebno, uporabi samo id pošte in lahko tudi, kot si sam reku, ulico in hišno št skupaj
- v ds lahko vstaviš več tabel, ni potrebno ds1, ds2, ds3
command = new SqlCommand(firstSql, connection);
         adapter.SelectCommand = command;
         adapter.Fill(ds, "First Table");

         adapter.SelectCommand.CommandText = secondSql;
         adapter.Fill(ds, "Second Table");


več tukaj

- če sem prav razumel, bi ti rad v datagridview-u izpisal vse tabele (povezano)?

detroit je izjavil:


select stolpec1 as x, stolpec2 as y, stolpec3 + stolpec4 as z from kakakadu


-urejanje lahko uporabiš SqlCommandBuilder, samo s tem lahko urejaš samo eno tabelo v datagridview-u. Lahko tudi dodaš button v datagridview (uredi) in ti za željeno vrstico odpre formo urejanja in v tej formi(s textbox-i in combobox-i) urejaš podatke (z update sql)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#, SQLite] update to database

Oddelek: Programiranje
5667 (546) Yacked2
»

vb mysql dataset update

Oddelek: Programiranje
81249 (1129) korenje3
»

[C#] Ne prkaže takoj podatkov

Oddelek: Programiranje
81139 (1002) darkolord
»

[C#] Dostop do objekta iz različnih form

Oddelek: Programiranje
182173 (1886) Kekec
»

[C#] DATA GRID VIEW

Oddelek: Programiranje
131949 (1829) Kekec

Več podobnih tem