Laden...

Profil von telly168

myCSharp.de - Member Mitglied seit

Alle Beiträge

ok danke für die Hilfe.

Werd ich umgehend mir anschauen und testen.

Danke

Hallo
Nein leider nicht. Ich finde es halt schwierig da es im Debug absolute nicht vorkommt.

Gibts zu Profiler eine gute Erklärung irgendwo ?

Viele Grüße
telly

Hallo,
Danke für die Antwort.
Leider ist es egal ob die Anwendung 10 Sekunden oder 10 Stunden läuft. Das Problem tritt immer genau dann auf wie oben beschrieben.

Was mir auch augefallen. Im Task - Mananger kann man sehen das die Threads immer wieder erhöht werden bis die Anwendung dann wirklich irgendwann (das kann ewig dauern) abstürzt.

Viele Grüße

telly

Hallo,

Ich hab folgendes Problem und weis leider nicht mehr weiter.

Problembeschreibung:

Die Anwendung läuft, der Benutzer sperrt den Computer und der Anmeldebildschirm wird gezeigt.
Geht der Computer in den ruhe Modus oder es wird auf Benutzerwechseln gedrückt und man Logt sich wieder ein, ist die Oberfläche stehen geblieben. (Es kann nichts mehr geklickt werden)

Alle Funktionen also sprich Logging, Komunikation mit der Datenbank etc. laufen weiter.

Im Prinzip steht nur die Oberfläche.

Auch ausbauen von Invoke, Tasks, Thread hat keine abhilfe geschaffen.

Dieses Problem tritt nicht im Debug auf.

Leider weis ich nicht mehr wo ich suchen soll.

Net Version 4,4.5 beides getestet.
Oberfläche Windows Forms.

Danke für die Hilfe

telly

Hallo,

ok sowas hab ich mir was gedacht.

Danke für die hilfe

Viele Grüße

telly

Es handelt sich um 17531 Datensätze.

Es gibt kein datagridView es gibt nur eine ComboBox mit Anbindugn an ein DataTable

Viele Grüße

telly

Hallo,
die langsam Answeisung liegt hier :


this.DataSource = table.DefaultView.ToTable(true, this.SpaltenKopf);

Das genaue Problem liegt hier :


table.DefaultView.ToTable(true, this.SpaltenKopf);

Alles mit dem Debugger getestet.

Viele Grüße
telly

Hallo,
danke für die schnelle antwort.

Leider verfolge ich deine Post nicht also kann ich nicht sagen wie oft du das geschrieben hast.
Ich wusste es nicht und hab es jetzt geändert.

Ich brauche eine Distincte abfrage der Spalte

[URL= http://msdn.microsoft.com/de-de/library/wec2b2e6%28v=vs.110%29.aspx]DefaultView.ToTable[/url]

und ja das was du siehst ist Test-Code und ja ich probiere aus.

Viele Grüße

Telly

verwendetes Datenbanksystem: <SQL Compact 4.0>

Hallo,

Ich erstelle aus einer Datei ein DatatTable und binde dieses an mehrere ComboBoxen.

Für jede ComboBox muss das Datatable Distinct für eine bestimmte Zeile erstellt werden.

Dies passiert mit der Anweisung

datatable.DefaultView.ToTable(true,"spaltenname");

Dies funktioniert für Datatable mit Zeilen anzahl unter 10000 sehr gut.
Alles was darüber liegt dauert (sehr) lange, da jedesmal die Tabelle neu erstellt werden muss.

Hab das anbinden der Datasource schon mit der Invoke funktion versucht. Das macht das ganz etwas schneller.


protected delegate void updateDataSourceDelegate(DataTable table);


 internal void dataSourceSingle(DataTable table)
 {
 updateDataSourceDelegate xxx = new updateDataSourceDelegate(updateMe);
  this.Invoke(xxx, new object[] { table });
}


     private void updateMe(DataTable table)
        {
         
            this.DataSource = table.DefaultView.ToTable(true, this.SpaltenKopf);
            this.DisplayMember = this.SpaltenKopf;
            this.ValueMember = this.SpaltenKopf;
            this.Update();
        }



Wenn jemand eine Idee hat was ich verbessern oder ändern könnte bzw. ein besser Lösung kennt wäre ich sehr dankbar.

Viele Grüße

telly

Hallo,

die Mode funktioniert.
Hatte noch einen kleinen fehler drin das ich einmal die Verbindung zu viele Öffne!

Problem gelöst.

Wenn jemand fragen hat kann er gerne scheiben.

Viele Grüße

telly

Hallo,

ich hab eine Teilösung gefunden.

Ich hab eine Benutzerobjekt das an das Datenbank Objekt gebunden ist. Nachdem eine Aktion ausgeführt wurde durch einen SqlAdapter wird dem Benutzerobjekt gesagt es soll sich wieder mit der Datenbank mit Mode = Exclusive verbinden bist der nächste Vorgangen passiert. Dann Disconnectet das Benutzer Objekt und die Aktion darf Ausgeführt.

Ich prüfe beim Programmstart und zwischen drin immer wieder ob die Datenbank in gebrauchst ist. Sollte die Datenbank von einem anderen Prozess verwendet werden wird die SqlEx. ErrorCode 25035 zurück gegeben.

Auf einem normalen Pc funktioniert das sehr sehr gut und stabil. Auf dem Terminal Server bzw Windows 2008 Server nicht. Manchmal merkt der Server das die Datei in gebrauch ist manchmal nicht. Scheinbar glücksache 😉 oder ich habe was falsch eingestellt.

Falls jemand noch eine besser Lösung oder Idee kommt.
Gern dazu Posten. Wenn jemand Codebeispiele braucht auch kein Problem.

Viele Grüße

Telly

Hallo,

Die Anwendung läuft auf einem Terminal Server.
Ich muss das mehrfach starten anhand von Prüfen auf Owner testen.
Ich wollte dies halt über die Datenbank versuchen.
Da SQl Compackt den Mode=Exclusive unterstützt sprich es wird nur eine Verbindung zugelassen müsste ich versuchen die Verbindung aufrecht zu erhalten.

Wäre das eine möglichkeit ?

Viele Grüße

telly

verwendetes Datenbanksystem: SQL Compact 4.0

Hallo,
Ich habe mehrere Datenbankdateien (vom Schema) in SqlCompact 4.0 erstellt und an meine Anwendung angebunden.

Die Anwendung darf mehrfach gestartet werden, allderdings immer nur die Datenbank auswählen nicht gebrauch ist.

Gibt es eine möglichkeit dies in SQL Compackt 4.0 zu unterbinden. Also zu prüfen ob bereits eine Verbindung besteht.

Da ich SqlCeDataAdapter verwende, wird die Verbindung nach jeder aktion automatisch geschlossen.

Kennt jemand oder gibt es überhaupt möglichkeit dies zu prüfen.
Bin auch für andere Ideen offen.

Danke für die Hilfe.

Viele grüße

telly

24.01.2013 - 17:07 Uhr

Hallo

mal etwas provozierend ausgedrückt: Was bringt es, wenn du hier mit dem Fuß aufstampfst und sagst, "ich will aber"?

mal etwas provozierend geantwortet : Das war ein Beispiel ..

@telly168:
Welchen Teil von

Der ResourceManager erwartet exakt diese Vorgehensweise und Verzeichnisse und nichts anderes.
Willst Du etwas anderes haben musst du es selber implementieren.
Hast Du jetzt nicht verstanden

Ich hab alles verstanden .. danke

Ich habe in meinen Projekten machmal einen Order innerhalb des Projekts, der ExternalLibs heißt.
Darin befinden sich [...]

Danke das hat mir sehr geholfen.

Zu den andern Post schenke ich mir jetzt die Kommentare.

Ich werde das Fragen stellen bzw. das Posten hier vermeiden. Ich hoffe das ihr mit eueren Kollegen an eurem Arbeitsplatz nicht so umgeht.
Auch wenn das Thema scheinbar etwas überflüssig war.

Soll Leute auf der Welt geben die nicht den ganzen Tag C# und .NET machen. 8o

Danke für die tolle Unterstützung

telly

24.01.2013 - 15:31 Uhr

Hallo

Meine Begründung :

Ich will damit bezwecken das für MICH eine Sinnvolle Struktur in der Ausagbe des Programms besteht.

Beispiel:
/lib/10 Dll Files
/Sprache/Sprachdateien
/Data/Meine Datenbankdateien
/src/ Meine Source Dateien die ich zum Kopieren brauch
./Anwendungs.exe

und nicht :

10 Dll Files
Anwendungs.exe
Sprachfiles
Datenbank Dateien

Am Ende hab ich dann 50 Dateien in einem Ordner. ... Nein 😃

Sorry das zu sagen, aber ersteres.

Du scheinst immer davon auszugehen das etwas das nicht dokumentiert ist dann irgendwie anders geht.
Bei MS ist es eher so das etwas das nicht dokumentiert ist, eben gar nicht mit den MS mitteln geht.

Ich kann mir nicht vorstellen das das nicht geht 😃

Beispiel ResourceDLL's:
Du glaubst das die magisch irgendwie wo anders hergenommen werden können, wenn sie mit dem std Verfahren von MS benutzt werden.
Dem ist nicht so. Der ResourceManager erwartet exakt diese Vorgehensweise und Verzeichnisse und nichts anderes.
Willst Du etwas anderes haben musst du es selber implementieren.
Genauso ist es mit allen anderen Sachen auch.
Willst Du etwas anders haben als es MS Dokumentiert musst du meist alles neu machen.

Magisch irgendwo hergenommen werden ? oO
Ich hab die Dateien selbst erstellt ich weiss wo sie herkommen ? Ich will VS C# oder wem auch immer sagen:
"Speichere meine Sprache Dateien oder auch alle Resource Dateien in dem Ordner X" Beim erstellen der Ausgabe.

lg
telly

24.01.2013 - 14:45 Uhr

Hallo,

warum sollte das vorhaben meine DLL's und meine Sprachdateien nach der installation in einem extra Ordner zu haben keinen sinn machen ?

telly

24.01.2013 - 13:52 Uhr

Hi,
danke für die schnelle antwort. Aber ich schnalls nicht. Irgendwie gibt mehrer möglichkeiten die man nutzen kann, aber ich schnall sie alle nicht 😦

Ich hab den XML Code unten nachgeschaut und auch verwendet in der app.config .. aber ohne erfolg. Die DLL's liegen immer noch im Hauptverzeichnis.

Die zweite frage war:

Wie kann ich Resource Dateien -> Sprachdateien in einem andern Ordner Speichern.
Momentan legt er diese einfach /de-DE und /en-GB an.

Manchmal frag ich mich ob ich einfach manche sachen nicht blicke oder die Dokumentation von Microsoft einfach nur schlecht ist. Bei andern Programmiersprach bekomm ich sowas problemlos hin .. .

Danke
telly

24.01.2013 - 12:24 Uhr

Hallo,

meine Anwendung bennötigt eine Ordnerstruktur:

Anwendung 
   |___ Data
          |___SRC 
          |___DLL 
          |___Sprache 

Das ist jetzt nur ein Beispiel.
Im Verzeichnis DATA\SRC liegen Dateien die gelesen
Im Verzeichnis DLL -> soll die Importierten Bib. reinkommen
Im Verzeichnis Sprache -> die Sprachdateien

Wenn ich die Ordnerstruktur im DEBUG Ornder anlege findet mein Programm sie ohne Probleme ..Alldergins nicht die DLL Files. Nur wenn diese im Anwendungsverzeichnis direkt liegen .

Meine erste Frage wäre hier:

Gibt es eine möglichkeit VS2012 oder C# (im Code) oder dem Verweiss selbst zusagen wo er nach dem debug bzw. release oder installation (mittles Setup) zusagen wo er nach den dll schauen ?

Weiterhin habe ich für die Sprachdateien 2 Ordnerangelegt ResStrings.de-DE.resx die er im Hauptverzeichnis unter de-DE/Anwendungsname.resource.dll anlegt (auch im deubg ordner und relase ordner). Gibt es eine möglichkeit diese auch in einen weiteren unterhordner zu legen ?

vielen danke für euer hilfe

telly

01.08.2012 - 18:40 Uhr

Hallo
Bei mir hat DoEvents geholfen.
Nutz die Anweisung nur ganz ganz selten bzw. brauch ich sie sehr selten.

lg
telly

31.07.2012 - 17:51 Uhr

Hi!
Ich hab das gerade versucht:


  panel1.Width = panel1.Width - 180;
   Application.DoEvents();

versuchs mal damit. Bei mir zeigt er das in dem moment richtig an.
Bilder sind immer hilfreich 😉

lg
telly

Hallo !
brauchst du einen Rahmen zum maximieren ?
Wenn nicht

myform.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // kein Rahmen


lg
telly

Hallo herbivore,

ok ich werde es versuchen umzusetzen
vielen dank für die Hilfe

lg telly

Hallo
vielen dank für die schnelle Antwort !
So bzw. so ähnlich hab ich das auch gemacht . Nur das indexchanged passiert vorher. D.h. das das Item nicht mehr selected und den Focus verliert das Item auch was nicht passieren darf. Ich will das abwähl des Items mit verhindern

lg telly

Hallo,
Ich habe folgendes Problem:

Wenn das Event SelectedIndexChanged im Listview auftritt soll vorher etwas geprüft werden. Wenn ein bestimmer zustanden nach dieser Überprüfung eintritt soll das event abgebrochen werden und das changing Item vorgang soll nicht passieren.
Mein problem besteht nun darin das das item schon gewechselt ist bzw die selection schon nicht mehr vorhanden wenn das event auslöst.
Ich habe mir bereicht mittels click event das Angeklickte Item gemerkt allerding wir dann bei wieder Listview.Item[index].selected = true immer wieder das SelectedIndexChanged ausgelöst !

Kann auch sein das ich das falsche event auslöse?
Danke für die Hilfe

telly

Kein mehr eine Idee was es mit der Fehlermeldung auf sich hat ?
lg telly

Hallo,
vielen dank für die Antwort.
Remove,Dispose etc hab ich schon versucht.
Hab mit SysinternalsSuite den Hintergrundprozess Anzeigen lassen.
Auch wenn ich Dispose hat dies kein Einfluss auf den Hintergrundprozess. (Leider)

Ich hab es wie beschrieben mit dem Com-Steuelement versucht. Was sehr gut Funktioniert bis auf das Dynamsiche Hinzufügen.


                AdobeReaderControl ax1 = new AdobeReaderControl();
                ax1.Dock = DockStyle.Fill;
                ax1.Show();
                ax1.LoadFile(source); -> AxHost Fehler Meldung
                panelDokDateiDetails.Controls.Add(ax1);


Hab das Beispiel hier aus dem Forum verwendet


  public  class AdobeReaderControl : AxHost
    {
      public AdobeReaderControl()
          : base("{CA8A9780-280D-11CF-A24D-444553540000}") 
      { }
      public void LoadFile(string path)
      {
        [ERROR]NullReferenceExction[/ERROR]
          this.GetOcx().GetType().InvokeMember("LoadFile", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, this.GetOcx(), new object[1] { path });



      }

    }


Es geht mir nur darum die PDF Dateien Anzuzeigen und dann die Datei zu verschieben. Bei dem Com-St klaptt das auch sehr sehr gut.

danke für die Hilfe
lg
telly

Hallo!

       ( bs.DataSource = table;
        bs.Filter = string.Format(&quot;Anzeigename LIKE &#39;%{0}%&#39; OR Team LIKE &#39;%{0}%&#39; OR Telefon LIKE &#39;%{0}%&#39;&quot;, searchText);  
       (dataGridView1.DataSource = bs;
        setStatusIcons();  
   (     dataGridView1.Refresh();

Ist bs ein Dataview ?
Du bindest vorallem ein Datatabel an und dann ein bs ?
Ich geh mal davon aus das beim Refresh wieder das Datatabel ohne Filter gesetzt wird.

Fals du kein Dataview Objekt nutz versuch es mal damit.

Dataview

lg telly

Also wenn ich deinen letzten Post richtig verstehe
dann sollen oben das Beispiel sich genau so verhalten wie das untere ?

Hallo!
Margin Wert vom Panel auf 0 gestezt ? und von den Buttons ?

Hallo
Ich habs gerade nachgestellt. Bei passiert der Fehler nicht
Panel ist bei mir auf Dock.fill gestellt


  private void InitializeComponent()
        {
            this.panel1 = new System.Windows.Forms.Panel();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            this.button5 = new System.Windows.Forms.Button();
            this.button6 = new System.Windows.Forms.Button();
            this.button7 = new System.Windows.Forms.Button();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.AutoScroll = true;
            this.panel1.Controls.Add(this.button7);
            this.panel1.Controls.Add(this.button6);
            this.panel1.Controls.Add(this.button5);
            this.panel1.Controls.Add(this.button4);
            this.panel1.Controls.Add(this.button3);
            this.panel1.Controls.Add(this.button2);
            this.panel1.Controls.Add(this.button1);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(0, 0);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(345, 256);
            this.panel1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(3, 22);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(277, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(3, 80);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(277, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = "button2";
            this.button2.UseVisualStyleBackColor = true;
            // 
            // button3
            // 
            this.button3.Location = new System.Drawing.Point(3, 51);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(277, 23);
            this.button3.TabIndex = 2;
            this.button3.Text = "button3";
            this.button3.UseVisualStyleBackColor = true;
            // 
            // button4
            // 
            this.button4.Location = new System.Drawing.Point(3, 109);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(277, 23);
            this.button4.TabIndex = 3;
            this.button4.Text = "button4";
            this.button4.UseVisualStyleBackColor = true;
            // 
            // button5
            // 
            this.button5.Location = new System.Drawing.Point(3, 138);
            this.button5.Name = "button5";
            this.button5.Size = new System.Drawing.Size(277, 23);
            this.button5.TabIndex = 4;
            this.button5.Text = "button5";
            this.button5.UseVisualStyleBackColor = true;
            // 
            // button6
            // 
            this.button6.Location = new System.Drawing.Point(3, 167);
            this.button6.Name = "button6";
            this.button6.Size = new System.Drawing.Size(277, 23);
            this.button6.TabIndex = 5;
            this.button6.Text = "button6";
            this.button6.UseVisualStyleBackColor = true;
            // 
            // button7
            // 
            this.button7.Location = new System.Drawing.Point(3, 196);
            this.button7.Name = "button7";
            this.button7.Size = new System.Drawing.Size(277, 23);
            this.button7.TabIndex = 6;
            this.button7.Text = "button7";
            this.button7.UseVisualStyleBackColor = true;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.AutoScroll = true;
            this.ClientSize = new System.Drawing.Size(345, 256);
            this.Controls.Add(this.panel1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.panel1.ResumeLayout(false);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button7;
        private System.Windows.Forms.Button button6;
        private System.Windows.Forms.Button button5;
        private System.Windows.Forms.Button button4;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button2;

lg telly

Hallo,

Ich hab ein Problem mit dem Com-Steuerelement von Adobe PDF Reader.

Zu meinem Problem:

Ich zeige beim Anklicken eines Listviewitems in einem Listview entweder Bilder über eine PictureBox oder PDF Dateien über den PDF Reader an, je nach dem welcher Datei Typ dieses Datei hat.

Hier enstehen bei mir 2 Probleme:

Das erste ursprüngliche Problem:
Beim nutzen des Webbrowser um die PDF Anzuzeigen bestanden das Problem, wenn ich die Datei verschieben wollte war die Datei noch von dem Adobe Reader Plugin des Webbrowser in gebrauch und blockierte die Datei. Lösungsversuch war:
Einmal Readystate Complete: was aber leider kein abhilfe brachte da der Browser immer auf "WebBrowserReadyState.Uninitialized" stehen blieb.
Auch DocumentComplete Event in Verbindung mit DoEvents wurde versucht.
Dann hab ich versucht eine leere Pdf als neuen Link anzubinden was aber auch keine abhilfe schaffte da dann manchmal 2 Hintergrundprozesse gestartet wurden und die Datei je nach größe immer noch in gebrauch war.

Das zweite Problem:
Ich bin letzendlich (über dieses Forum) auf die Com-Steuerelemente Methode gestoßen welche auch extrem gut funktioniert wenn ich das Steuerelement direkt auf die Oberfläche ziehe und die Datei anbinde.Allerdings das Dynamische hinzufügen funktioniert nicht. Da ich bei jedem Datei wechsel das Steuerelement in entsprechenden Panel per Remove entferne und eine anders Hinzufügen muss. Die Picturebox funktioniert hier ohne probleme. Die PDF wird aber bei neuem Laden nicht mehr angezeigt da das Steuerelement weg ist.

Wenn ich das Dynamische Hinzufügen für das Com-Steuerlement versuche bekomme ich immer eine Axhost fehler Meldung.

Hab das Beispiel Projekte von hier versucht und bekomme dann beim LoadFile NullReferenceExction.

Ich bin für Hilfe oder neue Ideen sehr dankbar.

lg
telly

21.02.2012 - 08:20 Uhr

ok
ich werde es versuchen
Danke noch mal
closed 😃

20.02.2012 - 23:16 Uhr

Alle Listviews sind davon betroffen.
Die Darstellung wie oben im Bild sind ja Listviews. Wie du schon gesagt hast kann ich in einem DGV auch Bilder anzeigen. Wenm ich deine möglichkeit in betracht ziehe die Thumbs im Grid darstellen zu lassen ist einfach meine frage: Kann ich im DGV das Thumbnail genau so darstellen lassen wie in meinem Bild vom Listview ?

20.02.2012 - 19:50 Uhr

ok erst mal vielen dank für deine Hilfe.
Allerdings war mein Thema das Datenset Update.
Muss ich jetzt das Gesamte Datenset neu einlesen oder nich und ich lese das ganze in ein Listview ein oder gibt es eine möglichkeit genau die gleiche Darstellung wie hier in meine Listview beim DGV zu erstellen .
lg
telly 😄

20.02.2012 - 19:10 Uhr

also
zu 1
in der Database


      private void DateiDokLeer()
        {
            string SqlText = "Select * from Datei where Dok_ID ISNULL";
            DatenAdapter = new SQLiteDataAdapter(SqlText, connction);
            DatenAdapter.Fill(edScanDS, "DateiDokLeer");
        }

zu 2
Ja das ist eine GlobalVariable und ja das weiss ich. (Sorry aber so war es einfach leichter 😉)
zu3
Sorry bin nicht gerade so gut in Datenbanken wie speichert man Thumbnail in Datenbanken ?
-> Nutze SQLlite (bzw MUSS)
zu 4
Ja ich kenne foreach allderings ist das maxlenth zum begrenzen der Anzeige gedacht und noch aus der start funktionen welche die Gesamte liste an Thumbnails für die DateiDokLeer erstellt.
Wenn mehr wie 20 Hinzugefügt werden werden in einem Hintergrundprozess die ganze liste neu erstellt !
was in dem Fall bei Speichern von Thumbnails nicht passieren müsste 😃(

20.02.2012 - 17:13 Uhr

Sorry versteh leider nicht was du mir damit sagen willst! (vllt stell ich mich auch gerade bissel drum dran)

20.02.2012 - 16:17 Uhr

Ok jetzt versteh ich was du meinst.
Damit es deutlicher wird hab ich ein Bild im Anhang.
Die Bilder werden aus einem bzw. aus mehreren Verzeichnissen gelesen und in die Imagelist (wie oben im Code angezeigt) gelesen.
Wie soll ich das per Update einbinden, ohne ALLE Bilder neu zu erstellen, beim lösch bzw einbind vorgang.
lg
telly

20.02.2012 - 15:31 Uhr

Hallo,
Ich bin auf die Bildvorschau angewiesen egal was ist. Ich muss also das Listview nutzen.
Was heisst am Datenset vorbei schreibt ? Ich schreibe in das Dateset mit Select Insert Update Anweisung.
Ich kann die Datenbank immer noch ändern wenn das mir so viel erleichtert! Daran solls nicht scheiter.
Die Software wird allerdings veröffentlich von dahher kommt das ObjektListView schon nicht mehr in betracht.
lg
telly

20.02.2012 - 14:12 Uhr

Hi
Danke für die Idee ich kann das Objekt. Leider: Ist meine Gesamt Oberfläche schon fertig und es liegen nur noch diese 2 Probleme wirklich vor.
Mir würde es schon viel weiterhelfen wenn mir jemand erklären könnte wie genau das Listview mit der Imagelist und den Items zusammenhängt.
Weiteres Problem immer noch noch mein Datenset. Ich muss wie gesagt immer die Gesamt List neu laden nicht nur einfach die die sich verändert haben.

Das ganze jetzt nocheinmal umzubauen wäre viel zu viel arbeit.

lg
telly

20.02.2012 - 12:36 Uhr

Hallo,
ich arbeite zur Zeit an einem Programm welches mir Bilder in einem Listview darstellt und diese bei auswahl in einen bestimmten Ordner verschiebt. Die Bilder werden per OpenFileDialog eingelesen und anschließend mit Hashcode in die Datenbank geschrieben(SqlLite) anschließend werden Vorschauen für die Bilder erstellt (im Listview). Die Bilder werden beim starten des Programm in eine Image List geschrieben die aus den Vorhanden Daten der Datenbank erstellt wird.
Leider bestehen nun 2 Probleme bei denen ich mir entweder nicht so sicher bin oder mir nicht klar ist ob das überhaupt richtig wie ich genau vorgehe.

Problem 1:
Erstellen von Thumbnails:


int maxLengt = GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows.Count;
            ImageList iconListKopie = new ImageList();
            iconListKopie.ImageSize = new Size(GlobalVar.iconBreite, GlobalVar.iconBreite);
          
            iconListKopie.Images.Clear();
            IntPtr hImgSmall;
            string FName;
            SHFILEINFO shinfo = new SHFILEINFO();
            
            int i = 0;
            while (i != maxLengt)
            {
                //Icon Size festlegen
                currentPath = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\Arbeitskorb" + "\\" + GlobalVar.ArbeitskorbName + "\\").ToString();
               FileInfo file = new FileInfo(currentPath + GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_NeuName"].ToString());
                string fileName = currentPath + GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_NeuName"].ToString();
                FName = GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_Name"].ToString();
               

                if (file.Extension == ".jpg" || file.Extension == ".png" || file.Extension == ".TIF")
                {
                    Image jpgThumb;
                    Image image;
                    image = Image.FromFile(fileName);
                    jpgThumb = image.GetThumbnailImage(GlobalVar.iconBreite, GlobalVar.iconHoehe, null, new IntPtr());
                    image.Dispose();
                    iconListKopie.Images.Add(jpgThumb);
                    
                    iconListKopie.Images.SetKeyName(i, GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_ID"].ToString());
                    
                }
                else
                {
                    hImgSmall = Icons.SHGetFileInfo(FName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Icons.SHGFI_ICON | Icons.SHGFI_LARGEICON);
                    System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
                    iconListKopie.ImageSize = new Size(GlobalVar.iconBreite, GlobalVar.iconHoehe);

                    iconListKopie.Images.Add(myIcon);
                    iconListKopie.Images.SetKeyName(i, GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_ID"].ToString());
                }
                    
                i++;
                
            };
            
            GlobalVar.IconList = iconListKopie;
            iconListKopie.Dispose();

        }

Hier erstelle ich alle Bilder die erkannt werden ist es kein Bild lasse ich das Icon aus der Shell32 suchen und einfügen. Die dauert ab 100 Bildern sehr lang.. aber leider weiss ich keine andere möglichkeit.
Das eigentlich Problem das hier entsteht entsteht beim Lösch vorgang. Entferne ich ein Bild aus der Liste und der Datenbank so muss die GESAMTE List und das Listview neu befüllen.
Leider versteh ich die Bindung von Listview und Imagelist nicht so ganz. Wie hängen diese zwei zusammen ? Entfernt er das Bild aus der Imagelist mit wenn ich das Item Remove?

Problem 2
WEnn ich Images Image Hinzufüge passiert das gleich ich muss immer das Gesamte Datenset neu laden und die Imageliste und die Icons neu erstellen das dauert wie schon erwähnt sehr lange.
Gibt es hier eine Methode das Datenset nur Änderung lesen zulassen und nur einzelne Bilder hinzfügen zulassen ohne alles neu erstellen zu müssen ?

Danke für eure Hilfe!
lg
telly