Hallo,
VScroll1.Value geht nich oder ich hab ne falsche syntax.
Vscroll1. Value = Vscroll1.Min
oder
Vscroll1.Value = 1
geht.
Das Problem ‚Mitscrollen‘ ist damit nicht gelöst.
Gruß, Rainer
Hallo,
VScroll1.Value geht nich oder ich hab ne falsche syntax.
Vscroll1. Value = Vscroll1.Min
oder
Vscroll1.Value = 1
geht.
Das Problem ‚Mitscrollen‘ ist damit nicht gelöst.
Gruß, Rainer
Hallo,
OK. Aber das neue Problem …
Wenn Du mit der Cursortaste in Grid scrollst, läuft VScroll nicht mit.
Ich finde kein Ereignis, das ausgelöst wird, wenn Du im Grid mit den Corsortasten scrollst. Es wird nur ein ereignis ausgelöst, wenn Du im sichtbaren Bereich navigierst, aber nicht, wenn die Tabelle scrollt. Auch das Scrollereignis wird nicht ausgelöst.
Für das ‚Filterproblem‘ hatte ich inzwischen sowohl die Ursache als auch die Lösung.
Wenn Du z.B. die ersten 10 Datensätze ausfilterst, wird davon nicht der erste sichtbare Datensatz die Nr.1, sondern der bleibt Nr.11. Wenn Du die Sortierung änderst, ist .Firstrow beim obersten datensatz nicht zwangsläufig 1!!! .Firstrow gibt Recordset.AbsolutePosition zurück, unabhängig davon, in welcher zeile der datensatz angezeigt wird. Zum Scrollen kannst Du da keine Informationen bekommen. An der Stelle würde nur asynchrones Mitzählen helfen, darauf verlassen, daß nichts übersprungen wird. Das funktioniert so leidlich, wäre mir aber zu unzuverlässig. So würe das etwa aussehen:
Dim Pos As Long
Private Sub Command1\_Click()
su = rsMain.Fields(0).Name & " \> 10 And " & rsMain.Fields(0).Name & "
Nur löst das das Problem nicht, daß der Scrollbalken nicht mit scrollt, wenn Du mit den Cursortasten das Datagrid scrollst. Das Datagrid löst in dem Fall kein Ereignis aus, und ich habe keine Ahnung, wie man das anders realisieren kann. Der Code wird immer übler und unsicherer. Mir dem Datagrid wirst Du so Dein Projekt nicht vernünftig realisieren können, das Teil ist einfach schlecht programmiert.
Gruß, Rainer
Also erstma vielen vielen Dank!
Aber so unsicher lass ich das lieber. Wenn filter eingegeben werden sind eh relativ wenig ergebnisse die kann der user dann auch scrollen. Müssen sie sich eben vorerst damit abfinden. Hab ne Beta zum testen raus gegeben. Bis jetz ist nur ein Problem aufgetreten. Und zwar:
VScroll.
Also ich habe ja beim HeadClick ein Sortieren nach Artikelnummer ausgelöst. Wenn nun nach DESC sortiert wurde, ist ja der letzte eintrag oben und der erste unten das heisst zb DGV.FirstRow Ist 10000 und DGV.LastRow (welche funktion es leider nicht gibt.) ist 1.
Das Problem nun ist, das ich keine möglichkeit kenne wie ich dem VScroll sage das er sich quasi umdrehen muss und von oben nach unten die werte abarbeiten soll. Also quasi
10
9
8
…
VScroll kann glaub nur
…
8
9
10
Wie schaffe ich es die umzudrehen?!
PS. Ich verwende NIE wieder das DataGrid!
Grüße vom digi
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Wie schaffe ich es die umzudrehen?!
Gar nicht, Du mußt rechnen.
Wert = Vscroll1.Max - Vscroll1.Value
PS. Ich verwende NIE wieder das DataGrid!
*gg* außer ich schaffe es, das zu verbessern. Das wird mein ‚Spiel‘ zu Weihnachten, ich will ja auch Spaß haben. Ich bin aber noch nicht sicher, daß ich das kann. Einen Versuch ist es aber wert.
(Das MsFlexgrid kennt TopRow. )
Gruß, Rainer
Danke erstmal…
Und ich bin hier gerade am Kolabieren.
Ich hab ne Sortierfunktion. Jetz soll Plötzlich nich nur nach Artikelnummer sortiert werden können sondern auch nach 5 Anderen spalten.
Das Problem dieser Spalten ist, sie haben nicht immer werte. Wo meine bisherige sortierfunktion leicht an ihre grenzen kommt.
Ich habe gerade mal kurz n backup von meinem Projekt gemacht und das DataGrid gegen n Flexgrid ersetzt. Es füllt sich schön es funzt alles ohne große anpassungen.
Bis auf:
Scrollfunktion meldet:
Und Positiv am Flex ist bis jetz:
Ich hab ne sortierfunktion die funktioniert wie sie soll
Wenn die vier sachen gelöst sind dann steig ich aufs Flexgrid um und hoffe das mir das den gewünschten durchbruch bringt. Scheiss doch drauf jetz auf die paar stunden die ich verliere. Besser als die haare die ich mir raufe
Aber ist halt die eine funktion die ich unbedingt brauch. die mir aus der selektierten zeile gezielt die werte die ich aufrufe in ne Textbox schreibt.
Private Sub DGV\_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim ArtNr As String
If JetzNich = False Then ' RowChange nicht zulassen wenn True
ArtNr = DGV.Columns("Artikelnummer")
Else
Exit Sub
End If
Nummertxt.Text = ArtNr
End Sub
Wenns sowas auch für Flexgrid gibt, dann ist alles klar was ich benutz …
Aber das mit meinem Mausrad is natürlich auch nich zu verachten. Wenn es jetz so einfach geht, dass ich villeicht anstelle von DGV.Scroll 0, 1 oder -1 DGV.IrgendNeFunktion 0,1 || -1 dann währe das klasse:smile:
hoffe hat nomma jemand ne idee
Grüße vom digi
Hallo,
Und ich bin hier gerade am Kolabieren.
das wollen wir doch vermeiden.
Ich hab ne Sortierfunktion. Jetz soll Plötzlich nich nur nach
Artikelnummer sortiert werden können sondern auch nach 5
Anderen spalten.
hmmm, ist das ein Problem? Du hast die Sortierfunktion doch ohnehin so gebaut, daß sie auf Klick in die Titelzeile reagiert und dann diesem Feld sortiert wird. Ich habe mir doch gestern ein Beispiel geschrieben, das hat so funktioniert. Habe ich die Prozedur nicht mit gepostet?
Das Problem dieser Spalten ist, sie haben nicht immer werte.
Wo meine bisherige sortierfunktion leicht an ihre grenzen
kommt.
??? verstehe ich nicht. Deine Sortierfunktion hat bei mir übrigens gar nicht funktioniert, die hatte ich geändert …
Ich habe gerade mal kurz n backup von meinem Projekt gemacht
und das DataGrid gegen n Flexgrid ersetzt. Es füllt sich schön
es funzt alles ohne große anpassungen.
Dann bist Du noch nicht durch
Bis auf:
Scrollfunktion meldet:
- DGV.Scroll gibts nich. Klar gibts ja auch nich^^ gibts da ne
funktion um die anzusteuern?
Brauchst Du nicht. Das ist ohnehin zu unsicher, weil Du keine brauchbare Meldung bekommst, wo die Tabelle steht.
Private Sub Form\_Load()
Me.Show
VScroll1.Min = 1
VScroll1.Max = MSHFlexGrid1.Rows - 1
End Sub
Private Sub VScroll1\_Scroll()
MSHFlexGrid1.TopRow = VScroll1.Value
End Sub
Das ist doch viel schöner und funktioniert ohne Verrenkungen.
- Spalten die unsichtbar sein sollen find ich keine
möglichkeit dem das zu sagen.
Gibt’s auch nicht. Aber mit
MSHFlexGrid1.ColWidth(2) = 1
ist die Spalte 2 (beginnt bei 0 zu zählen) parktisch nicht zu sehen, weil sie nur einen Pixel breit ist. Aber das macht man eigentlich schon im SQL-String. Warum lädst Du das Feld, wenn Du es nicht anzeigen willst?
- DGV.ApproxCount gibt es nicht. Wie zählt ma beim Flex die
datensätze?
DGV.Rows
- Mein DGV_RowColChange ereignis geht nich mehr
gibt’s nicht, weil das Flexgrid nur zum Lesen ist, Daten verändern geht damit nicht, auch keinen Datensatz löschen oder schreiben. Du kannst aber trotzden Navigieren, ich glaube Du suchst ‚EnterCell‘. Das reagiert nicht nur auf Scrollen sondern auch schon auf den ersten Klick.
Und Positiv am Flex ist bis jetz:
Ich hab ne sortierfunktion die funktioniert wie sie soll
Ja, aber keinen Filter, den mußt Du nun doch mit dem SQL-String machen, wie es sich gehört.
Wenn die vier sachen gelöst sind dann steig ich aufs Flexgrid
um und hoffe das mir das den gewünschten durchbruch bringt.
Scheiss doch drauf jetz auf die paar stunden die ich verliere.
Besser als die haare die ich mir raufeAber ist halt die eine funktion die ich unbedingt brauch. die
mir aus der selektierten zeile gezielt die werte die ich
aufrufe in ne Textbox schreibt.
Die ganze Zeile?
Private Sub MSHFlexGrid1\_EnterCell()
Dim i As Integer
For i = 0 To dgv.Cols - 1
Text1(i).Text = dgv.TextMatrix(dgv.Row, i)
Next
End Sub
Private Sub DGV_RowColChange(LastRow As Variant, ByVal LastCol
As Integer)
Dim ArtNr As StringIf JetzNich = False Then ’ RowChange nicht
zulassen wenn True
ArtNr = DGV.Columns(„Artikelnummer“)Else
Exit Sub
End If
Nummertxt.Text = ArtNrEnd Sub
Wenns sowas auch für Flexgrid gibt, dann ist alles klar was
ich benutz…
Aber das mit meinem Mausrad is natürlich auch nich zu
verachten. Wenn es jetz so einfach geht, dass ich villeicht
anstelle von DGV.Scroll 0, 1 oder -1 DGV.IrgendNeFunktion 0,1
|| -1 dann währe das klasse:smile:
Ja. Du setzt ScrCnt oder etwas ähnliches auf 1 oder -1 und …
If ScrCnt \> 0 And ScrCnt
... endlich 'saubere' Werte, ohne zu hoffen daß sich das Programm nicht verzählt. :smile:
Gruß, Rainer
Hallo,
sorry, ich bin völlig neben der Rolle, was das hier …
Private Sub Form\_Load()
Me.Show
VScroll1.Min = 1
VScroll1.Max = MSHFlexGrid1.Rows - 1
End Sub
Private Sub VScroll1\_Scroll()
MSHFlexGrid1.TopRow = VScroll1.Value
End Sub
… sollte weiß ich auch nicht. Wozu denn VScroll, wenn Du das Felxgrid nimmst, das macht das doch selbst.
in den Eigenschaften DGV.ScrollTrack = True stellen und gut ist’s, dann scrollt das. Beim Flexgrid müssen wird das nicht schreiben, das ist fertig.
Gruß, Rainer
Hi,
ich habe noch mehr Unfug in meinem Beitrag gefunden. Ich bin wohl Urlaubsreif.
If ScrCnt \> 0 And ScrCnt
muß natürlich
If DGV.TopRow \> 1 And DGV.TopRow
heißen.
Gruß, Rainer
Also bei meiner Funktion mit ColRowChange hat es funktioniert. Auch bei nur klicken in das Datagrid. ich konnte alles wunderbar navigieren.
Ich muss das leider so machen weil die Datenbank verfuddelt is. Ich hab schon n sql string der geht über ne dreiviertel A4 seite mit endlos vielen join, innerjoin, right outer join und und und und…
Die Filterfunktion ist auch so gewollt und Funktioniert auch beim Flexgrid ohne irgendwas gemacht zu haben klappt klasse.
Auch meine suche die ich Programmiert hab funktioniert ohne Probleme auch beim Flex grid ich bin erstaunt wie leicht der wechsel war
Aber meine einfache funktion mit dem ColRowChange. Die brauch ich. Wenn die nicht geht kann ich das alles vergessen.
Ich will das nich mit ner For schleife machen ^^ Quasi genauso wie es da steht wie ichs schon gebaut hab fürs DaraGrid. Aber ich Probiers einfach mal mit dem Event vom FlexGrid dieses EnterCell.
Und genau wegen der Funktion brauch ich die versteckten Spalten. Denn wenn ich für jede Zeile die ich anschaue ne SQL abfrage mache für die werte die ich brauch, bin ich bei der gleichen Performance wie von dem ursprungsprogramm. Und ziel ist es ja das es schneller funktioniert was es ja macht .
Ich hoffe ja, dass man mit dem Flexgrid das so machen kann wie es meine ColRowChange Event gemacht hat.
Also quasi:
ArtNr = DGV.Columns(„Artikelnummer“)
Bez1 = DGV.Columns(„Bezeichnung 1“)
Bez2 = DGV.Columns(„Bezeichnung 2“)
Ltxt = DGV.Columns(„Langtext“)
Dimtxt = DGV.Columns(„Dimensionstext“)
Haupt = DGV.Columns(„Hauptlieferant“)
Referenz = DGV.Columns(„USER_Referenz“)
Die paar werte in ne Variable geschrieben.
und weiter unten in ne textbox. Und sowas is das Was ich dann auch fürs Flexgrid brauch. Eine Funktion die allein in der Zeile wo gerade der zeiger steht aus den Spalten Artikelnummer und so weiter bis 30 alle infos raus fischt und in den textboxen darstellt.
Für 3 der werte muss ich ne extra SQL abfrage absenden und die dann einblenden. Geht leider nich anders. Der admin hat sich auch schon n kopf zerbrochen wie man den SQL string noch basteln kann aber mehr is einfach nich raus zu holen und so gehts ja. Das Problem is halt einfach die datenbank is scheisse. Lustig werden erst noch die Englische und Portugiesische version da is noch beschissner ^^ …
Naja aber erstma muss das Grundgerüst stehen in deutsch wo ich dachte ich hätts ^^ …
Die sachen die de jetz gepostet hast probier ich morgen gleich ma auf arbeit. Währe geil wenns gleich funzt
Grüße vom digi…
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Also bei meiner Funktion mit ColRowChange hat es funktioniert.
Auch bei nur klicken in das Datagrid. ich konnte alles
wunderbar navigieren.
OK, Ok … Egal was ich da falsch gemacht habe, es muß ja nur bei Dir funktionieren.
Ich muss das leider so machen weil die Datenbank verfuddelt
is. Ich hab schon n sql string der geht über ne dreiviertel A4
seite mit endlos vielen join, innerjoin, right outer join und
und und und…
Die Filterfunktion ist auch so gewollt und Funktioniert auch
beim Flexgrid ohne irgendwas gemacht zu habenklappt
klasse.Auch meine suche die ich Programmiert hab funktioniert ohne
Probleme auch beim Flex gridich bin erstaunt wie leicht
der wechsel warAber meine einfache funktion mit dem ColRowChange. Die brauch
ich. Wenn die nicht geht kann ich das alles vergessen.
Dafür hast Du doch .EnterCell ist ähnlich, nur besser.
Ich will das nich mit ner For schleife machen ^^ Quasi genauso
wie es da steht wie ichs schon gebaut hab fürs DaraGrid. Aber
ich Probiers einfach mal mit dem Event vom FlexGrid dieses
EnterCell.
Ja, Du mußt das nicht in eine Schleife bauen. ColRowChange hat ja beim Scrollen nicht reagiert, das ist, was bei EnterCell anders ist, das geht auch beim Scrollen.
Und genau wegen der Funktion brauch ich die versteckten
Spalten. Denn wenn ich für jede Zeile die ich anschaue ne SQL
abfrage mache für die werte die ich brauch, bin ich bei der
gleichen Performance wie von dem ursprungsprogramm. Und ziel
ist es ja das es schneller funktioniert was es ja macht.
hmmm, dann noch mal suchen … ich fasse es nicht. Danke für den Tipp! Kannte ich noch nicht.
DGV.ColIsVisible(2) = False
Schaltet die zeite Spalte unsichtbar.
Ich hoffe ja, dass man mit dem Flexgrid das so machen kann wie
es meine ColRowChange Event gemacht hat.Also quasi:
- Aktuell Selektierte Row
Zeige in TextBoxen
Artikelnummer
Hersteller
und glaube 20 andere Text Felder. Die sollen angezeigt werden
wenn ne Zeile in dem DGV selektiert ist dann angezeigt werden
was mir diese DGV_RowColChange macht.
Da wird aus der aktuellen zeile zb:ArtNr = DGV.Columns(„Artikelnummer“)
Bez1 = DGV.Columns(„Bezeichnung 1“)
Bez2 = DGV.Columns(„Bezeichnung 2“)
Ltxt = DGV.Columns(„Langtext“)
Dimtxt = DGV.Columns(„Dimensionstext“)
Haupt = DGV.Columns(„Hauptlieferant“)
Referenz = DGV.Columns(„USER_Referenz“)
Nein, sieht etwas anders aus.
For i=0 To DGV.Cols - 1
Select Case DGV.TextMatrix( 0 , i)
Case "Artikelnummer"
ArtNr = DGV.TextMatrix(DGV.Row, i)
Cse "Bezeichnung 1"
Bez1 = DGV.Textmatrix(DGV.Row, i)
....
End Select
Next
Oder Du arbeitest nicht mit den Namen und trägst die Spalte direkt ein. DGV.Row ist die Zeile, die angeklickt ist. Das ‚i‘ gibt die Spalte an.
Die paar werte in ne Variable geschrieben.
und weiter unten in ne textbox. Und sowas is das Was ich dann
auch fürs Flexgrid brauch. Eine Funktion die allein in der
Zeile wo gerade der zeiger steht aus den Spalten Artikelnummer
und so weiter bis 30 alle infos raus fischt und in den
textboxen darstellt.
Ja, macht der Code.
Für 3 der werte muss ich ne extra SQL abfrage absenden und die
dann einblenden. Geht leider nich anders. Der admin hat sich
auch schon n kopf zerbrochen wie man den SQL string noch
basteln kann aber mehr is einfach nich raus zu holen und so
gehts ja. Das Problem is halt einfach die datenbank is
scheisse. Lustig werden erst noch die Englische und
Portugiesische versionda is noch beschissner ^^ …
Naja aber erstma muss das Grundgerüst stehen in deutsch wo ich
dachte ich hätts ^^ …Die sachen die de jetz gepostet hast probier ich morgen gleich
ma auf arbeit. Währe geil wenns gleich funzt
Ich denke schon. Du bist schon mal die Fummelei mit VScroll los und der Rest ist mit dem Flexgrid auch leichter.
Gruß, Rainer
Hallo, ich mal wieder …
Also … das Scrollen funktioniert wunderbar ich bin beeindruckt! Warum nich gleich so …
Also aber ein problem habe ich! Und zwar habe ich in meinem DataGrid
9000 Zeilen aber im Flexgrid werden mit der selben abfrage und korrekter füllung nur 2049 Zeilen dargestellt! Sie sind existent. ABER sie sind anscheinend unsichtbar. Denn wenn ich in meine Filterfunktion einen filter eingeb kommen auch die Artikelnummern mit 9000 die die im Flexgrid sonst nich dargstellt werden.
Gibts da irgend ne einfache lösung?
Grüße vom digi
Hallo,
Also … das Scrollen funktioniert wunderbar ich bin
beeindruckt! Warum nich gleich so…
Also aber ein problem habe ich! Und zwar habe ich in meinem
DataGrid
9000 Zeilen aber im Flexgrid werden mit der selben abfrage und
korrekter füllung nur 2049 Zeilen dargestellt! Sie sind
existent. ABER sie sind anscheinend unsichtbar. Denn wenn ich
in meine Filterfunktion einen filter eingeb kommen auch die
Artikelnummern mit 9000 die die im Flexgrid sonst nich
dargstellt werden.Gibts da irgend ne einfache lösung?
da kenne ich gar keine Lösung. Die genaue Zahl, wie weit es funktioniert kannte ich noch nicht, weiter oben hatte ich aber schon geschrieben …
Um das Recordset nur anzuzeigen ist das Flexgrid besser geeignet. … Es werden dann nicht alle Datensätze angezeigt, Du bekommst noch nicht einmal einen Fehler. Die letzten Datensätze werden dann einfach nicht mit angezeigt, der Anwender erfährt nicht, daß es noch mehr Datensätze gibt.
Hoffentlich scheitert es jetzt nicht an diesem Bug im Flexgrid.
Gruß, Rainer
oh man ich seh mich grad wie ich das ding zum fenster raus leddere und mitm monitor hinterher springe … AHHH
Ich habe da ne lösung gefunden:
rsMain.MoveFirst
' Assuming that rs is your ADO recordset
DGV.Rows = rsMain.RecordCount + 1
rsVar = rsMain.GetString(adClipString, rsMain.RecordCount)
DGV.Cols = rsMain.Fields.Count
' Set column names in the grid
For i = 1 To rsMain.Fields.Count - 1
DGV.TextMatrix(0, i) = rsMain.Fields(i).Name
Next
DGV.Row = 1
DGV.Col = 1
' Set range of cells in the grid
DGV.RowSel = DGV.Rows - 1
DGV.ColSel = DGV.Cols - 1
DGV.Clip = rsVar
' Reset the grid's selected range of cells
DGV.RowSel = DGV.Row
DGV.ColSel = DGV.Col
Das Problem hierbei ist, dass in einer Spalte der Datenbank die einträge teilweise mit ENTER drinne stehen also mit Umbruch. Also legt er jetz jedesmal wenn ein umbruch drinne ist eine neue zeile an.
Im DataGrid sind es ganz genau 8095 zeilen im FlexGrid ohne diesen aufruf 2048 mit dieser lösung 8111 weil er Leerzeichen in neue zeilen umwandelt. Gibts ne möglichkeit wie ich das abfangen kann?
Hoffe da gibts was : /
Das FlexGrid gefällt mir so schon viel viel besser unter anderem auch weil diese VScroll ding und das alles wegfällt. Das Scrollen funktioniert ohne Probleme sowie das sortieren. Das selektieren der Datensätze und in meine 30 Variablen schreiben sowie in labels anzeigen. Meine Drucken funktion klappt klasse die filter alles ohne Probleme. Aber was nützt das wenn die darstellung nicht so klappt wie es sein muss
grüße vom digi …
Hallo,
oh man ich seh mich grad wie ich das ding zum fenster raus
leddere und mitm monitor hinterher springe … AHHH
*gg* ich kann’s verstehen. Immer wenn ein Problem gelöst scheint, taucht das nächste auf.
Ich habe da ne lösung gefunden:
rsMain.MoveFirst
' Assuming that rs is your ADO recordset
DGV.Rows = rsMain.RecordCount + 1
rsVar = rsMain.GetString(adClipString, rsMain.RecordCount)
DGV.Cols = rsMain.Fields.Count
' Set column names in the grid
For i = 1 To rsMain.Fields.Count - 1
DGV.TextMatrix(0, i) = rsMain.Fields(i).Name
Next
DGV.Row = 1
DGV.Col = 1
' Set range of cells in the grid
DGV.RowSel = DGV.Rows - 1
DGV.ColSel = DGV.Cols - 1
DGV.Clip = rsVar
' Reset the grid's selected range of cells
DGV.RowSel = DGV.Row
DGV.ColSel = DGV.Col
hübsch, wo hast Du den Code her? Wenn ich den richtig verstehe, genügt Dir davon schon …
DGV.Rows = rsMain.RecordCount + 1
Mit
rsVar = rsMain.GetString(adClipString, rsMain.RecordCount)
und
DGV.Clip = rsVar
hast Du Dir das aktuelle Problem eingebaut. Die Zeilen sind dazu da, genau das zu erreichen, was Du nicht möchtest. Kommentier mal nur die beiden Zeilen aus, dann wird’s schon gehen. Der Rest ist wohl auch eher überflüssig, würde ich vermuten. Es wird wohl reichen, .Rows neu zu setzen. Daß das so geht, wußte ich auch noch nicht. Ich lerne immer mehr dazu!
Gruß, Rainer
Lösung und neues Problem ^^ es ist langsam wirklich nich mehr schön ^^
Also. Die Clip funktion macht das irgendwie das der komplette inhalt in das Grid eingefügt wird sonst sind nur leere spalten.
In der „Var“ steht der text mit „TAB“ getrennt drinne.
Wenn nun wie in meinem Fall ein umbruch stattfand, hat er eine neue zeile im grid angelegt.
Ich habe einfach:
Dim Temporary As String
Temporary = Replace(rsVar, vbCrLf, " ")
DGV.Clip = Temporary
gemacht. OK damit währe das Problem gelöst.
Das nächste ist, dass die EnterCell funktion mit den 8000 zeilen anscheinend leicht überlastet ist. Er meint „Subscribe out of Range“
So nun habe ich mir gedacht, was natürlich auch die Performance enorm steigern würde, dass man ermittelt, wieviele Zeilen in dem FlexGrid sind.
Nachdem man diesen Fixen wert hat, könnte man doch in dem Recordset immer sagen das er immer beim scrollen „+ 1“ anhängen und die erste spalte löschen soll oder halt beim hoch scrollen dazu machen soll. Weiss nich obs verständlich war aber ich denk schon *g*
Geht das, dass man immer nur bestimmte inhalte in das grid einfügt? also explizit sagt jetz les mir die nächste zeile in das grid ein und lösche die die gerade oben verschwunden ist. ?!
Alternativ zu diesen ganzen Problemen hier, würde mir für mein Datagrid mittlerweile einfach eine Sortierfunktion reichen die funktioniert.
Quasi die alphabetisch sowie auch numärisch sortiert die 7 Spalten die zu sehen sind. Ohne rumzujammern, wenn in einem Feld mal kein wert steht. So wie das meine funktion jetz im Flex Grid macht.
Aber wie übersetz ich diese funktion von FlexGridianisch in DataGridianisch ?! ^^ … oder geht das überhaupt?
Grüße vom digi …
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Lösung und neues Problem ^^ es ist langsam wirklich nich mehr
schön ^^Also. Die Clip funktion macht das irgendwie das der komplette
inhalt in das Grid eingefügt wird sonst sind nur leere
spalten.
aha … das muß ich mir dann mal gelegentlich ansehen.
In der „Var“ steht der text mit „TAB“ getrennt drinne.
Wenn nun wie in meinem Fall ein umbruch stattfand, hat er eine
neue zeile im grid angelegt.Ich habe einfach:
Dim Temporary As String
Temporary = Replace(rsVar, vbCrLf, " ")
DGV.Clip = Temporarygemacht. OK damit währe das Problem gelöst.
Gut.
Das nächste ist, dass die EnterCell funktion mit den 8000
zeilen anscheinend leicht überlastet ist. Er meint „Subscribe
out of Range“
*grummel* keine Ahnung, was MS da geschrieben hat.
So nun habe ich mir gedacht, was natürlich auch die
Performance enorm steigern würde, dass man ermittelt, wieviele
Zeilen in dem FlexGrid sind.
Die Größe legst Du ja in der Entwicklungsumgebung fest, die kannst Du ja einfach zählen.
Nachdem man diesen Fixen wert hat, könnte man doch in dem
Recordset immer sagen das er immer beim scrollen „+ 1“
anhängen und die erste spalte löschen soll oder halt beim hoch
scrollen dazu machen soll. Weiss nich obs verständlich war
aber ich denk schon *g*
Ich denke auch. Du willst das Flexgrid nicht mit Deinem Recordset verbinden, sondern immer nur einen Teil der Datensäte anzeigen. Wenn Du das so machst, verschwindet der Scrollbalken wieder, Du hast ja nur so viele Datensätze im Flexgrid, wie Du ausrechnest, das bedeutet, Du mußt die Scrollfunktion doch wieder selbst programmieren. Etwa so …
Private Sub Form\_Load()
Dim c As Integer
Me.Show
DoEvents
DGV.Rows = 17
DGV.Cols = rstMain.Fields.Count
VScroll1.Min = 1
VScroll1.Max = rstMain.RecordCount - 15
For c = 0 To rstMain.Fields.Count - 1
DGV.TextMatrix(0, c) = rstMain.Fields.Item(c).Name
Next
End Sub
Private Sub VScroll1\_Scroll()
Dim i As Integer
For i = VScroll1.Value To VScroll1.Value + 15
rstMain.AbsolutePosition = i
For c = 0 To rstMain.Fields.Count - 1
DGV.TextMatrix(i - VScroll1.Value + 1, c) = rstMain(c)
Next
Next
End Sub
Soertieren geht da, aber Dein Filter? Alles in Allem wohl keine gute Idee, denke ich.
Alternativ zu diesen ganzen Problemen hier, würde mir für mein
Datagrid mittlerweile einfach eine Sortierfunktion reichen die
funktioniert.
hmmm. Aber scrollen geht dann eben nicht so wie Du möchstes, das wird wohl nichts.
Quasi die alphabetisch sowie auch numärisch sortiert die 7
Spalten die zu sehen sind. Ohne rumzujammern, wenn in einem
Feld mal kein wert steht. So wie das meine funktion jetz im
Flex Grid macht.
Aber wie übersetz ich diese funktion von FlexGridianisch in
DataGridianisch?! ^^ … oder geht das überhaupt?
Hast Du nicht gesagt, die Sortierfunktion im Datagrid wäre in Ordnung gewesen? Bei mir geht das Sortieren sauber.
Private Sub DGV\_HeadClick(ByVal ColIndex As Integer)
If Check1.Value = Checked Then
rsMain.Sort = rsMain.Fields(ColIndex).Name
Else
rsMain.Sort = rsMain.Fields(ColIndex).Name & " Desc"
End If
End Sub
Sortiert wird das Recordset, nicht das Datagrid! Die Änderung wirkt sich aber sofort auf das Datagrid aus. Beim Flexgrid wäre dazu ein rsMain.Refresh nötig.
Gruß, Rainer
Nix da ^^ … die funktion geht nicht. Er sortiert zwar mein DataGrid. Aber wie das is die andere frage. Die artikelnummern gehen ja noch. Problem: Wenn ich von DESC nach ASC sortiere, und scrollen will (nicht mit VSCroll sondern mit der normalen Scroll Bar vom Datagrid) dann gehts die ersten 10 Datensätze nur nach unten zu scrollen und nich mehr nach oben. Spackt total ab.
Wenn ich Bezeichnung1 Sortiere, spinnt er total rum. Da hat nix was mit ASC oder DESC zu tun. Da haut er alles durcheinander. (nebeninfo: Bezeichnung 1 kann länger sein als 255 zeichen).
Nichts desto trotz macht er was. Aber was ist die frage ^^ …
Nächstes Problem ist wenn in einer Spalte die sortiert werden soll ein Leeres Feld ist. Kommt n fehler und schmiert ab.
Wenn wir das gelöst bekomm küss ich dir die füße *lach* ^^
Hab jetz den Colindex weil im RS stehen ja mehr spalten die von 0 bis 29 gehen. Anders ermittelt. ALso mit ner Case anweisung.
Wenn Colindex
case 0
Spaltenname = Artikelnummer
case 1
Spaltenname = Bezeichnung1
usw …
Das geht auch. Das Problem ist der sortierausdruck. Ich hab schon überlegt ob ichs mit ner SQL abfrage mach. Aber das dauert zu lang. und währe zu umständlich zb mit den filtern usw. Weil soll ja auch gehen wenn die filter aktiv sind.
naja danke erstmal ich hab entschieden ich bleibe bei dem DataGrid. Da besteht wenigstens nich die gefahr von verlorenen Datensätzen.
Grüße vom digi
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Lob und anerkennung. ^^
Danke nochmal für die umfangreiche Hilfe!!!
Sooo … nachdem ich das ServicePack 6 Für Visual Basic installiert hab, funktioniert der ganze Spass ohne jedwede Probleme!
Das FlexGrid zeigt ALLES perfekt an. Alle events, Sortieren suche filter das anzeigen von allen datensätzen filter löschen funktioniert wunderbar schön schnell und ohne fehlende datensätze.
Habe mir eine Prüffunktion gebastelt die ne meldung gibt, wenn weniger einträge im FlexGrid sind als im RecordSet.
Klappt an JEDER stelle endlich läuft ma was so wie ichs mir vorstelle ohne verkrümmungen und und und
Danke nochma für die hilfe!
Güße vom digi
Schöne feiertage und viel geschenke ^^
Hi digi,
Klappt an JEDER stelle
endlich läuft ma was so wie ichs mir
vorstelle ohne verkrümmungen und und und
wunderbar! Das ist doch mal etwas zu Weihnachten, ein abgschlossenes Projekt, das richtig rund läuft.
Schöne feiertage und viel geschenke ^^
Danke, Dir auch!
Gruß, Rainer