VScroll + DataGrid

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 :smile:

[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. :smile: 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. :smile:)

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:

  • DGV.Scroll gibts nich. Klar gibts ja auch nich^^ gibts da ne funktion um die anzusteuern?
  • Spalten die unsichtbar sein sollen find ich keine möglichkeit dem das zu sagen.
  • DGV.ApproxCount gibt es nicht. Wie zählt ma beim Flex die datensätze?
  • Mein DGV_RowColChange ereignis geht nich mehr

Und Positiv am Flex ist bis jetz:
Ich hab ne sortierfunktion die funktioniert wie sie soll :smiley:

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 :smiley:

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 :smile:

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 :wink:
Grüße vom digi :smile:

Hallo,

Und ich bin hier gerade am Kolabieren.

das wollen wir doch vermeiden. :smile:

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 :smile:

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. :smile: 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‘. :smile: 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 :smiley:

Ja, aber keinen Filter, den mußt Du nun doch mit dem SQL-String machen, wie es sich gehört. :smile:

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 :smiley:

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.

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 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 :smile:

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. :smile:

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 :wink: klappt klasse.

Auch meine suche die ich Programmiert hab funktioniert ohne Probleme auch beim Flex grid :wink: ich bin erstaunt wie leicht der wechsel war :smile:

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 :wink:.

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“)

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 :smiley: 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 :smile:

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 … :smile: Egal was ich da falsch gemacht habe, es muß ja nur bei Dir funktionieren. :smile:

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 :wink: klappt
klasse.

Auch meine suche die ich Programmiert hab funktioniert ohne
Probleme auch beim Flex grid :wink: ich bin erstaunt wie leicht
der wechsel war :smile:

Aber 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. :smile:

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 :wink:.

hmmm, dann noch mal suchen … ich fasse es nicht. Danke für den Tipp! :smile: Kannte ich noch nicht.

DGV.ColIsVisible(2) = False

Schaltet die zeite Spalte unsichtbar. :smile:

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 version :smiley: 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 :smile:

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 :smiley:

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 :smile:

Hallo,

Also … das Scrollen funktioniert wunderbar ich bin
beeindruckt! Warum nich gleich so :smiley:

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. :frowning:

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 :frowning:

grüße vom digi … :smile:

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. :smile: Ich lerne immer mehr dazu! :smile:

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 :smiley: ?! ^^ … 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 = Temporary

gemacht. 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 :smiley: ?! ^^ … 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 :smiley: *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 :smile: ich hab entschieden ich bleibe bei dem DataGrid. Da besteht wenigstens nich die gefahr von verlorenen Datensätzen.

Grüße vom digi :smile:

[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 :smile: endlich läuft ma was so wie ichs mir vorstelle ohne verkrümmungen und und und :wink:

Danke nochma für die hilfe! :smile:

Güße vom digi :smile:

Schöne feiertage und viel geschenke ^^

Hi digi,

Klappt an JEDER stelle :smile: endlich läuft ma was so wie ichs mir
vorstelle ohne verkrümmungen und und und :wink:

wunderbar! Das ist doch mal etwas zu Weihnachten, ein abgschlossenes Projekt, das richtig rund läuft. :smile:

Schöne feiertage und viel geschenke ^^

Danke, Dir auch!

Gruß, Rainer