Jump to content
GSForum - Segélyvonal

C# adatbázis


atzs
 Share

Recommended Posts

atzs

Sziasztok!

 

Nem tudok rájönni a dolog nyitjára. Ahogy visszaolvastam, lehet, hogy a szeptemberi számban benne van a válasz, de az éppen nincs a közelemben. :dühös:

 

Van két adattáblám Accessben. Van egy ID nevû mezõjük, amellyel össze lehetne õket kapcsolni - egyedi azonosító, az A tábla minden sorához pontosan egy sor tartozik a B táblából. Arra lenne szükségem, hogy ha az A táblában másik sorra térek át, akkor tegye ugyanezt a B táblában is. Ez a kód megoldja a problémát, ha nincs szûrés bekapcsolva:

 

        private void alap_konvertBindingSource_PositionChanged(object sender, EventArgs e)
       {
           this.alap_szamok_sbBindingSource.Position = this.alap_konvertBindingSource.Position;
       }

 

Csak ez az egész borul akkor, ha az A táblát szûröm. A B tábla lépeget, de egyesével, és elvész a kapcsolat a kettõ tábla között.

 

this.alap_szamok_sbBindingSource.Position = this.alap_szamok_sbBindingSource.Find("ID", ???);

 

Ez a kód remekül megoldaná a feladatot, de mit írjak a ??? helyére? Egyszerûen nem jövök rá, hogyan kérdezzem le kódból az aktuális rekord mezõinek a tartalmát.

 

(Az adatbázis adott, nem csinálhatok Viewt, nem vonhatok össze táblákat, nem térhetek át SQL-re, stb.)

 

Köszönöm!

Link to comment
Share on other sites

arpsoft

Kössed hozzá egy vezérlõhöz az A tábla ID mezõjét, és a vezérlõ értékét keressed.

Link to comment
Share on other sites

atzs

Próbáltam.

 

Amikor a program indul, akkor ezt a PositionChanged metódust meghívja, és a textbox text mezõje még üres.

Link to comment
Share on other sites

arpsoft

No, addig eljutottam, hogy van egy referenciám a lista egy elemére, ami egy objektum. De azt, hogy ebbõl hogyan lesz egy mezõ, azt nem tudom.

Esetleg az objektumnak lesz a mezõ nevével egyezõ tulajdonsága?

Most nincs nálam C#, nem tudom kipróbálni. (Meg VB .NET sem)

 

bindinsource.current ez az objektum referencia az aktuális elemre.

Link to comment
Share on other sites

atzs

Igen, erre is rájöttem, és itt el is akadtam ismét. Ha debug módban vagyok, és teszek a kódba egy töréspontot, és nézem a változók értékét, akkor a BindingSource.Current-et tovább lehet bontani. Van egy Row tulajdonsága, és azon belül ott csücsül, amit keresek. Viszont fordításkor azt mondja, hogy a BindingSource.Current-nek nincs definiálva a Row nevû tulajdonsága.

 

Ebbõl azt sejtem, hogy ott van az valahol, csak nem ez a logika, ahogyan el tudom érni. :hááát:

Link to comment
Share on other sites

arpsoft

Hohó, akkor kasztolunk!

Nem tudom, hogy van c#-ul, de C-ben így nézne ki:

Elõször definiálunk egy objektumot, aminek a típusa row.

 

row myrow;

 

Most elõvesszük a current tulajdnoságunkat és átkasztoljuk row típusúra:

myrow=(row) bindingsource.current

 

Innentõl kezdve használhatod a myrow összes tulajdonságát, a fordító nem rinyál.

Link to comment
Share on other sites

atzs

Ismét hódolok az Erõ elõtt. ;) Ez a kasztolás nekem teljesen új, de sikerült felfognom. Így a megoldás a következõ:

 

        private void alap_konvertBindingSource_PositionChanged(object sender, EventArgs e)
       {
           System.Data.DataRowView myRow;
           myRow = (System.Data.DataRowView)this.alap_konvertBindingSource.Current;
           int currPos;
           currPos = (int)myRow.Row.ItemArray[0] - 1;

           this.alap_szamok_sbBindingSource.Position = currPos;
       }

Vagy alternatívaként megy így is:

        private void alap_konvertBindingSource_PositionChanged(object sender, EventArgs e)
       {
           if (iDTextBox.Text != "")
           {
               this.alap_szamok_sbBindingSource.Position = System.Convert.ToInt16(iDTextBox.Text) - 1;
           }
       }

Érdekes módon a program indulásakor üres a string, de futás közben már mûködik ez a módszer is, de tegnap már túl fáradt voltam, hogy eszembe jusson így kipróbálni.

 

Ami még az érdekessége a dolognak, hogy ha az alap_konvertBindingSource esetén megváltoztatom a szûrést, akkor az alap_konvertBindingSource_PositionChanged nem fut le - még akkor sem, ha a szûrés bekapcsolása után adok neki egy MoveFirst-öt. Explicit meg kell hívni ezt a rutint a szûrés bekapcsolása után.

 

Arpsoft, köszönöm!

Link to comment
Share on other sites

arpsoft
:)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...