atzs Posted January 12, 2006 Posted January 12, 2006 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. 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!
arpsoft Posted January 12, 2006 Posted January 12, 2006 Kössed hozzá egy vezérlõhöz az A tábla ID mezõjét, és a vezérlõ értékét keressed.
atzs Posted January 12, 2006 Author Posted January 12, 2006 Próbáltam. Amikor a program indul, akkor ezt a PositionChanged metódust meghívja, és a textbox text mezõje még üres.
arpsoft Posted January 12, 2006 Posted January 12, 2006 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.
atzs Posted January 12, 2006 Author Posted January 12, 2006 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.
arpsoft Posted January 12, 2006 Posted January 12, 2006 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.
atzs Posted January 13, 2006 Author Posted January 13, 2006 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now