Zum Inhalt springen

xk4fu

Mitglieder
  • Gesamte Inhalte

    174
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von xk4fu

  1. öhm ich glaube, dass du der, die, das datasource wieder neu füllen musst (das weist du ja dem datagridview zu oder) conn.Open() ds.Clear() da.Fill(ds, "Tabelle") DataGridTabelle.DataSource = ds DataGridTabelle.DataMember = "Tabelle" DataGridTabelle.Refresh() conn.Close()
  2. habs rausgefunden: schuld ist NICHT das listview^^ und zwar: ich habe mehrere modale dialoge; da ja nur ein modaler dialog immer offen sein kann, prüfe ich mit dialog.visible = true, ob ein gewisser dialog offen ist oder nicht; in diesem fall wird ja der dialog schon geladen; jetzt habe ich im form load jedes dialoges mehrere abfragen; über ein property gebe ich dem dialog die im listview selektierte id; wenn ich den dialog nun aufrufe, wird logischerweise nichts mehr geladen, da ja form_load schon aufgerufen wurde; also schließe ich den dialog wieder (form_umload wird aufgerufen) und nun gehts wieder (beim zweiten mal), weil form_load wieder aufgerufen wird :upps
  3. ah jetzt habe ich es verstanden, wobei es auch nicht geht, wenn ich in einem anderen dialog links klicke und dann über einen button (in der toolbar) die entsprechende zeile auswerten will was ich außerdem festgestellt habe: wenn es im ersten dialog nicht geht (aufs erste mal) und ich in den anderen dialog wechsle, funktioniert es hier auch nicht beim ersten mal; selektiere ich nochmals eine zeile und führe die funktion aus, dann gehts... ich probiers mal, überall den hittest zu verwenden
  4. hab doch meinen code oben gepostet und sonst funktioniert es ja! nur manchmal nicht (leider habe ich noch nicht herausgefunden, wann dies ist) es tritt nur sporadisch auf! das ist es ja...
  5. was anderes als ListView1.SelectedItem.ListSubItems(1).Text gibt es doch nicht, um einen markierten datensatz auszulesen, oder?
  6. ich sortiere meine listview folgendermasen: Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) ListView1.SortKey = ColumnHeader.Index - 1 If ListView1.SortOrder = lvwAscending Then ListView1.SortOrder = lvwDescending Else ListView1.SortOrder = lvwAscending End If ListView1.Sorted = True End Sub damit klappt das auch bei mir ganz gut ansonsten verwende mal dieses modul: Modul: Option Explicit Private Const LVM_FIRST As Long = &H1000& Private Const LVM_SORTITEMS As Long = LVM_FIRST + 48& Private Const LVM_FINDITEM As Long = LVM_FIRST + 13& Private Const LVM_GETITEMTEXT As Long = LVM_FIRST + 45& Private Const LVFI_PARAM As Long = &H1& Private Const LVIF_TEXT As Long = &H1& Public Enum ListSortOrderConstants lvwAscending = 0& lvwDescending = 1& End Enum Private Type LVWSORT hWndListView As Long SortKey As Long SortOrder As ListSortOrderConstants End Type Private Type POINTAPI x As Long y As Long End Type Private Type LV_FINDINFO flags As Long psz As String lParam As Long pt As POINTAPI vkDirection As Long End Type Private Type LV_ITEM mask As Long iItem As Long iSubItem As Long state As Long stateMask As Long pszText As Long cchTextMax As Long iImage As Long lParam As Long iIndent As Long End Type Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal Message As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, _ ByRef Source As Any, _ ByVal Length As Long) Public Sub SortListView(ByVal hWndListView As Long, _ ByVal SortKey As Long, _ Optional ByVal SortOrder As ListSortOrderConstants = lvwAscending) Dim udtLVWSORT As LVWSORT With udtLVWSORT .hWndListView = hWndListView .SortKey = SortKey .SortOrder = SortOrder End With SendMessageLong hWndListView, _ LVM_SORTITEMS, _ VarPtr(udtLVWSORT), _ AddressOf CompareFunc End Sub Private Function CompareFunc(ByVal lParam1 As Long, _ ByVal lParam2 As Long, _ ByVal lParamSort As Long) As Long Dim ListViewSort As LVWSORT Dim sEntry1 As String Dim sEntry2 As String Dim vCompare1 As Variant Dim vCompare2 As Variant CopyMemory ListViewSort, _ ByVal lParamSort, _ Len(ListViewSort) sEntry1 = LvwGetText(ListViewSort, lParam1) sEntry2 = LvwGetText(ListViewSort, lParam2) If sEntry1 = sEntry2 Then Exit Function End If CompareFunc = CompareStrings(sEntry1, sEntry2, ListViewSort.SortOrder) End Function Private Function LvwGetText(ByRef ListViewSort As LVWSORT, _ ByVal lParam As Long) As String Dim udtFindInfo As LV_FINDINFO Dim udtLVItem As LV_ITEM Dim lngIndex As Long Dim baBuffer(512) As Byte Dim lngLength As Long With udtFindInfo .flags = LVFI_PARAM .lParam = lParam End With lngIndex = SendMessageLong(ListViewSort.hWndListView, _ LVM_FINDITEM, -1, _ VarPtr(udtFindInfo)) With udtLVItem .mask = LVIF_TEXT .iSubItem = ListViewSort.SortKey .pszText = VarPtr(baBuffer(0)) .cchTextMax = UBound(baBuffer) + 1 End With lngLength = SendMessageLong(ListViewSort.hWndListView, _ LVM_GETITEMTEXT, lngIndex, _ VarPtr(udtLVItem)) If lngLength > 0 Then LvwGetText = Left$(StrConv(baBuffer, vbUnicode), lngLength) End If End Function Private Function CompareStrings(ByRef sEntry1 As String, _ ByRef sEntry2 As String, _ ByVal SortOrder As ListSortOrderConstants) As Long If SortOrder = lvwAscending Then If sEntry1 < sEntry2 Then CompareStrings = -1 Else CompareStrings = 1 End If Else If sEntry1 > sEntry2 Then CompareStrings = -1 Else CompareStrings = 1 End If End If End Function Form: 'Sortierung bei Klick auf Kopfzeile Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) If ColumnHeader.Text = MsColHeader And MbAsc = True Then SortListView ListView1.hWnd, ColumnHeader.Index - 1, lvwDescending MbAsc = False Else SortListView ListView1.hWnd, ColumnHeader.Index - 1, lvwAscending MbAsc = True End If MsColHeader = ColumnHeader.Text End Sub
  7. ich hab ein listview unter vb 6, für das ich eine sortier funktion usw geschrieben hab; wenn ich mal zeit hab, schick ich dir das per pm; mein listview ist zwar nicht direkt eingefärbt, aber ich zeige bilder an, und färbe die schrift einer zeile ein; wenns geht, musst du das halt noch ein bisl umschreiben
  8. xk4fu

    datagrid sehr langsam

    ne; es lag am odbc treiber; es gab noch einen, der 2 monate danach rausgekommen ist, mit dem öffnet sich das rs sofort; da ich das datenladen etwas anders gemacht habe, dauert das halt noch ein wenig, dass alles aber auf odbcdataadapter umzustellen wär zu aufwendig;
  9. ähnlich, da kann ich dich beruhigen; bei uns sind in programmieren 1 über 80% durchgefallen, und 10 % sind gar nicht erst angetreten, also haben 90% diese prüfung nicht geschafft...
  10. du brauchst unterselects in denen jeweils zum bsp auf die id im über select verweist select (select * from feld6 where feld6.id = f6.id) as field6 from feld6 f6 usw
  11. xk4fu

    datagrid sehr langsam

    ne, an der db liegts sicher nicht und an der version auch nicht! wie gesagt, habe ich einen 7 sekunden delay, wenn ich das rs öffne, und weitere 6 sekunden, wenn ich das dt fülle; warum sollte es also an der db liegen, wenn ich z.b. die daten beim befüllen ja schon habe (aber es 6 sekunden dauert) muss wohl wo anders weitersuchen
  12. hab eigentlich das selbe problem; ich denke einfach, dass das ado.rs schlecht ist; da gibts ja was neues in .net... wie das genau hinhaut, weis ich leider nicht
  13. xk4fu

    datagrid sehr langsam

    folgendes noch: oRs.Open(sSql, oConn) benötigt ca. 7 sekunden If Not oRs.EOF Then While Not oRs.EOF End While End If benötigt ca. 6 sekunden
  14. xk4fu

    datagrid sehr langsam

    so sieht mein datenladen aus; im beispiel benötigt ein select für ca. 400 datensätze in der db ~ 400 ms, in vb ~ 13 sekunden Private dt As DataTable = New DataTable("Kriterien") Friend WithEvents mDataSet As DataSet Private dgTS As DataGridTableStyle = New DataGridTableStyle Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dcFallID As DataColumn = New DataColumn("FallID") Dim dcBezeichnung As DataColumn = New DataColumn("Bezeichnung") Dim dcFallArt As DataColumn = New DataColumn("Art") Dim dcFallKategorie As DataColumn = New DataColumn("Kategorie") Dim dcProjekt As DataColumn = New DataColumn("Projekt") Dim dcStatus As DataColumn = New DataColumn("Status") Dim dcPrio As DataColumn = New DataColumn("Prio") Dim dcAnlagedatum As DataColumn = New DataColumn("Anlagedatum") Dim dcWunschtermin As DataColumn = New DataColumn("Wunschtermin") Dim dcIstStart As DataColumn = New DataColumn("IstStart") Dim dcIstEnde As DataColumn = New DataColumn("IstEnde") Dim dcAnleger As DataColumn = New DataColumn("Anleger") Dim dcDelegiertAn As DataColumn = New DataColumn("Delegiert An") dcAnlagedatum.DataType = System.Type.GetType("System.DateTime") dcWunschtermin.DataType = System.Type.GetType("System.DateTime") dcIstStart.DataType = System.Type.GetType("System.DateTime") dcIstEnde.DataType = System.Type.GetType("System.DateTime") mDataSet = New DataSet("newDataSet") dt.Columns.AddRange(New DataColumn() {dcFallID, _ dcBezeichnung, _ dcFallArt, _ dcFallKategorie, _ dcProjekt, _ dcStatus, _ dcPrio, _ dcAnlagedatum, _ dcWunschtermin, _ dcIstStart, _ dcIstEnde, _ dcAnleger, _ dcDelegiertAn}) mDataSet.Tables.Add(dt) Dim sSql As String Dim oRs As New ADODB.Recordset Dim newRow As DataRow Dim iZeile As Integer sSql = " select * from vloadadmin " oRs.Open(sSql, oConn) If Not oRs.EOF Then dgTS.MappingName = "Kriterien" DataGrid1.TableStyles.Add(dgTS) DataGrid1.TableStyles("Kriterien").AlternatingBackColor = Color.LightGoldenrodYellow While Not oRs.EOF newRow = dt.NewRow dt.Rows.Add(newRow) dt.Rows(iZeile)("FallID") = oStdFct.vCheckNull(oRs(0).Value) dt.Rows(iZeile)("Bezeichnung") = oStdFct.vCheckNull(oRs(1).Value) dt.Rows(iZeile)("Art") = oStdFct.vTranslateFallArt(oRs(2).Value) dt.Rows(iZeile)("Kategorie") = oStdFct.vTranslateFallKategorie(oRs(3).Value) dt.Rows(iZeile)("Projekt") = oStdFct.vTranslateProjekt(oRs(4).Value) dt.Rows(iZeile)("Status") = oStdFct.vTranslateStatus(oRs(5).Value) dt.Rows(iZeile)("Prio") = oRs(13).Value & " - " & oStdFct.vTranslatePrio(oRs(13).Value) dt.Rows(iZeile)("IstStart") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(6).Value)) dt.Rows(iZeile)("IstEnde") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(7).Value)) dt.Rows(iZeile)("Anlagedatum") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(14).Value)) dt.Rows(iZeile)("Wunschtermin") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(11).Value)) dt.Rows(iZeile)("Anleger") = oStdFct.vTranslateUser(oStdFct.vCheckNullUser(oRs(15).Value)) dt.Rows(iZeile)("Delegiert An") = oStdFct.vTranslateUser(oStdFct.vCheckNullUser(oRs(16).Value)) oRs.MoveNext() iZeile = iZeile + 1 End While End If oRs.Close() DataGrid1.DataSource = dt Exit Sub End Sub
  15. xk4fu

    datagrid sehr langsam

    1, aber das dgrid werd ich so oder so verwenden,w eil ich schon immense zeit da rein gesteckt habe gibts für 1 was?
  16. ich nutze ein dgrid mit einem recorset recordset ist veraltet, ich weis; die frage ist nun: liegt es am recordset oder am dgrid, dass alles so langsam ist; der select selbst benötigt keine 2 sekunden; welche alternativen gibt es zum recordset?
  17. hoi version 6.0 sp6 Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Dim i As Long Dim lID As Long Dim sStatus As String Dim lvhti As LVHITTESTINFO Dim dwState As LVItemStates Dim iIndent As Long If (Button = vbRightButton) Then lvhti.pt.x = x / Screen.TwipsPerPixelX lvhti.pt.y = y / Screen.TwipsPerPixelY If (ListView_HitTest(m_hwndLV, lvhti) <> LVI_NOITEM) Then If Button = vbRightButton Then If ListView1.ListItems.count > 0 Then If Not ListView1.SelectedItem Is Nothing Then lID = ListView1.SelectedItem.ListSubItems(1).Text sStatus = Mid(ListView1.SelectedItem.SubItems(4), 5) If sStatus = "Erledigt" Then If Not ListView1.SelectedItem Is Nothing Then MbMausClick = False ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1 End If Exit Sub End If If lID <> 0 Then frmHauptmaske.lAuftrID = lID PopupMenu frmHauptmaske.mnuAuftrag If Not ListView1.SelectedItem Is Nothing Then MbMausClick = False ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1 End If End If End If End If End If Else If Not ListView1.SelectedItem Is Nothing Then MbMausClick = False ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1 End If End If End If End Sub ich muss dazusagen, dass die daten nur sporadisch "verloren gehen" also das ist nicht immer so

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...