Laden...

Forenbeiträge von Sythus Ingesamt 166 Beiträge

02.09.2015 - 11:32 Uhr

Hallo zusammen,

ich habe eine Liste mit Dictionaries mit den Keys "Column_1", "Column_2", "Column_3"

Außerdem eine List in der die Keys stehen nach dem ich das Dictionary gruppieren möchte.
List<string> GroupColumns = { "Column_1", "Column_2" };

Ich möchte nun das Dictionary nach den GroupColumns gruppieren und finde es schwierig das umzusetzen.


List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();

Dictionary<string, string> d1 = new Dictionary<string, string>();
d1.Add("Column_1", "A");
d1.Add("Column_2", "B");
d1.Add("Column_3", "C");

Dictionary<string, string> d2 = new Dictionary<string, string>();
d2.Add("Column_1", "E");
d2.Add("Column_2", "B");
d2.Add("Column_3", "C");

Dictionary<string, string> d3 = new Dictionary<string, string>();
d3.Add("Column_1", "G");
d3.Add("Column_2", "B");
d3.Add("Column_3", "C");

data.Add(d1);
data.Add(d2);
data.Add(d3);

List<string> groupColumns = new List<string>{ "Column_1", "Column_2" };

var grouped = data.GroupBy(x => x[groupColumn[0]]); // nach einem column funktioniert

// -> Ergebnis
// A
// E

// Ich möchte aber nun nach den Columns in der Liste gruppieren, hat jemand eine Idee?

// -> Ich möchte folgendes Ergebnis:
// A B
// E B
// G B


Ich möchte aber nun nach den Columns in der Liste gruppieren, hat jemand eine Idee?

Stecke hier fest. Vielen Dank schonmal:)

21.08.2015 - 09:01 Uhr

Hi Christian,

danke für deine Antwort.
das funktioniert gut, so lange man die Menge der Einträge kennt. Die Struktur innerhalb ist aber unbekannt, auch die Tiefe.

Ich versuche es aber mal in die Richtung weiter 😃

DAnke und VG

20.08.2015 - 15:48 Uhr

Hallo und vielen Dank für Eure Rückmeldungen.

Das mit der Node Struktur gefällt mir gut.. aber ich habe ehrlich gesagt das Problem diese ordentlich zu füllen

Die Daten kommen Beispielsweise so:

Welt, Europa, Deutschland
Welt, Europa, England
Welt, Europa, Frankreich

Ich bräuchte folgende Struktur.


Node.Name = Welt
{
  Node.Name = Europa
  {
     Node.Name = Deutschland
     Node.Name = England
     Node.Name = Frankreich
  }
}

Kann mich da jemand in die richtige Richtung schieben?

Danke 😃

Die Struktur sollte beliebig tief sein können.

20.08.2015 - 13:47 Uhr

Hallo zusammen,

ich hänge gerade bei einem Problem etwas in der Luft und hoffe ihr könnt mir helfen.


// Eine Liste mit vielen Zeilen die wiederum pro Zeile mehrere Spalten enthält
List<List<string>> lines = new List<List<string>>();

// In der Liste steht z.B.
// 1. Zeile: A, B, C
// 2. Zeile: A, B, D
// 3. Zeile: A, C, E
// Wieviel Spalten eine Zeile hat ist unbekannt.
// Ich möchte nun gruppieren das am ende die folgende Struktur heraus kommt:

// 
// A, B, C
//   ,   , D
// A, C, E

// Also quasi eine Gruppierung nach einer unbekannten Anzahl an spalten, damit Werte nicht doppelt übereinander stehen.


Hat jemand eine Idee?

Noch ein Beispiel:


Welt, Europa, Deutschland
Welt, Europa, England,
Welt, Europa, Frankreich

wird in der Ausgabe zu

Welt, Europa, Deutschland
                    England
                    Frankreich

Vielleicht bietet sich auch eine andere Struktur an.

Danke und viele Grüße,
Sythus

24.04.2015 - 09:23 Uhr

Hallo zusammen,

um Daten zu validieren durchlaufe ich eine Tabelle spaltenweise in einer for-Schleife.

Zu jeder Spalte sind feste Regeln (manche optional) definiert:

  • Datentyp
  • MaxLength
  • Whitelist (Daten die in der Spalte stehen dürfen)

Wie schon gesagt, durchlaufe ich die Spaltenwerte in einer for-schleife, prüfe in if Bedinungen die Regeln und teste anschließend auf DatenTyp, Maxlength usw.

Meine Frage ist nun: Gibt es dafür einen besseren Weg? Lässt sich beispielsweise eine ganze Liste aus String Werten performant auf Integer Werte prüfen?

Ich bin für jeden PerformanceTip dankbar.

Anbei auch der Code.


// Spaltenweise
            for (int i = 0; i < rules.Count; i++)
            {
                ValidationRules rule = rules[i];

                ExcelValidatorLog log = new ExcelValidatorLog("Errors of column: " + rule.headerName + Environment.NewLine);

                int excelColIndex = i + 1;

                for (int j = 2; j < excelData.GetLength(0); j++)
                {

                    string value = excelData[j, excelColIndex] == null ? null : excelData[j, excelColIndex].ToString();

                     if (string.IsNullOrEmpty(value) && rule.nullable == 0)
                    {
                        // Wert darf nicht null sein
                        log.Add(j, value, "Value is not allowed to be null or empty.");
                    }

                    switch (rule.dataType)
                    {
                        case 0:
                            // int
                            if (rule.nullable == 1 && value == null)
                                break;

                            int outInt = -1;
                            if (!int.TryParse(value, out outInt))
                            {
                                log.Add(j, value, "Value must be number.");
                            }
                            break;
                        case 1:
                            if (rule.nullable == 1 && value == null)
                                break;

                            // String - Größe prüfen
                            if (value.Length > rule.length)
                            {
                                log.Add(j, value, "Value length restriction of " + rule.length + " exceeded.");
                            }

                            // whitelist test
                            if (!string.IsNullOrEmpty(rule.whitelist))
                            {
                                string[] whiteListValues = rule.whitelist.Split(';');

                                if (!whiteListValues.Contains(value))
                                {
                                    log.Add(j, value, "Value must match a whitelist value.");
                                }
                            }
                            break;
                        case 2:
                            // Iso Länder Code
                            if (!isoCodeList.Contains(value))
                            {
                                log.Add(j, value, "Value is no isocode.");
                            }
                            break;
                        case 3:
                            // Datetime
                            if (string.IsNullOrEmpty(value) && rule.nullable == 1)
                                break; // its fine

                            try
                            {
                                double d = double.Parse(value);
                                DateTime conv = DateTime.FromOADate(d);
                            }
                            catch
                            {
                                log.Add(j, value, "Value must be a Datetime.");
                            }
                            break;
                        case 4:
                            float f = 1.0f;
                            if (!float.TryParse(value, out f))
                            {
                                log.Add(j, value, "Value must be a float value.");
                            }
                            break;
                        case 5:
                            // int
                            if (rule.nullable == 1 && value == null)
                                break; 

                            long outLong = -1;
                            if (!long.TryParse(value, out outLong))
                            {
                                log.Add(j, value, "Value must be number.");
                            }
                            break;
                        case 6:
                            // Datetime
                            if (string.IsNullOrEmpty(value) && rule.nullable == 1)
                                break; // its fine

                            try
                            {
                                double d = double.Parse(value);
                                DateTime conv = DateTime.FromOADate(d);
                                if (conv > DateTime.Now)
                                {
                                    // Wert darf nicht in der Zukunft liegen
                                    log.Add(j, value, "Date has to be in the past, but it is in the future.");
                                }
                            }
                            catch
                            {
                                log.Add(j, value, "Value must be a Datetime.");
                            }
                            break;
                    }
                    
                    if (rule.primaryKey.Value && excelColIndex == 1)
                    {
                        primaryKeys.Add(value);
                    }
                    else if(rule.primaryKey.Value)
                    {
                        primaryKeys[j-2] += value;
                    }
                }

            }

17.04.2015 - 21:46 Uhr

EPPlus habe ich auch versucht, aber bei manchen Dateien einen Interop Fehler bekommen. Das war für mich nicht debugbar und deshalb habe ich auf die Library verzichtet.

Open XML SDK schaue ich mir mal an, vielen Dank

Weiß denn jemand worauf es an kommt das eine Datei schnell eingelesen werden kann, oder welche Library die schnellste für das reine lesen ist?

30-40 Sekunden für eine Datei die schon im Speicher liegt finde ich etwas zu langsam.

17.04.2015 - 20:16 Uhr

Hallo zusammen,

hat jemand Erfahrung, was die schnellste Möglichkeit ist Excel Dateien in C# einzulesen und dann in einem gut zu bearbeiteten Objekt (z.B. DataTable) verfügbar zu haben?

Eine 24 MB Excel Datei benötigt bei mir vom Umwandeln des Streams in eine DataTable ca 30-40 Sekunden.
D.h. die Datei liegt schon vollständig als Stream vor und benötigt weitere 30-40 Sekunden bis Sie zu bearbeiten ist.

Ich brauche nur die Werte da raus (Formeln sind nicht relevant) und möchte wenn möglich kein echtes Excel im Hintergrund öffnen.

Danke für jeden Tip.

VIele Grüße,
Sythus

17.04.2015 - 13:46 Uhr

Danke für den Link. Wirklich sehr interessant was Herbivore da schreibt.

17.04.2015 - 09:30 Uhr

Herzlichen Dank an alle.

Die Ausführungszeit konnte mit euren Tips auf 10 Sekunden reduziert werden.

Maßgebend dafür waren tatsächlich Count, ElementAt und Linq.

Die ExcelDatei wird mit IExcelDataReader einmalig gelesen und in eine DataTable umgewandelt.

Das dauert initial 35-40 Sekunden, wäre schneller natürlich schöner, aber die restliche Datenbearbeitung geht dann sehr schnell.

Viele Grüße,
Sythus

16.04.2015 - 20:37 Uhr

Hallo Abt,

vielen Dank dafür. Das war mir nicht klar. Das probiere ich auf jeden Fall aus.
Aber eine Frage dazu (Interesse halber):

Spielt es noch eine Rolle wie ich die Excel Datei lese wenn ich sie bereits in meiner DataTable habe? Kann die Art und Weise irgendwie einen Einfluss darauf haben, wenn ich da durch iteriere?

Ich habe bisher noch mit keinem Profiler gearbeitet. Habe Visual Studio 2013. Ich versuche mal, ob ich das irgendwie hinbekomme. Gibts da einen bestimmten den ich nutzten sollte?

An den Dictionaries kann es nicht liegen oder?

Tausend Dank 😃

16.04.2015 - 19:25 Uhr

Sorry die wichtige Information habe ich vergessen.

Worksheet ist ein DataTable

Ich muss die Dateien lesen, validieren und dann in eine SQL Datenbank packen. D.h. ich muss diese Dateien Menge anDaten lesen (was letztendlich auch nur 45 MB sind)

Mit dem Profiler versuche ich mal. Aber die Problematik dreht sich wirklich nur um diese Forschleife.

Danke für dein Feedback.

16.04.2015 - 19:15 Uhr

Hallo zusammen,

ich hoffe ich habe den richtigen Bereich für meine Frage gefunden.

Ich habe eine DataTable (workSheet) die ich wie folgt zu IEnumerable<DataRow> umwandle:


            IEnumerable<DataRow> rows = from DataRow row in workSheet.Rows
                                        select row;

Durch diese Zeilen iteriere ich dann und hole mir aus jeder Zeile die Werte die ich benötigte und schreibe diese in ein Dictionary.


            for (int i = 1; i < rows.Count(); i++)
            {
                DataRow row = rows.ElementAt(i);


                for (int j = 0; j < rules.Count; ++j)
                {
                    dataDict[rules[j].headerName].Add(row.ItemArray[j].ToString());
                }

            }

Die Datatable hat ca. 100 000 Zeilen. Von jeder Zeile werden je 7 Werte in unterschiedliche Dictionary's geschrieben. (Pro Spalte 1 Dictionary)

D.h. das diese Schleife ca. 700 000 mal durchlaufen wird.

Wenn ich diese laufen lasse und nach 10 Minuten einen Breakpoint setze ist die Schleife gerade mal bei Datensatz 5000.

Ich habe etwas gegoogelt und ganz andere zeitliche Zahlen gefunden.
Was läuft da falsch? Was ist so unglaublich unperformant?

Ein paar Zusatzinformation:

  • Die Datatable wurde aus einem Excel File erstellt, ist zu diesem Zeitpunkt aber schon komplett vorhanden.
  • Das umwandeln der Datatable in IEnumerable ist hier unbeachtet (das würde ich noch ändern)
  • Es geht hier nur darum die spalten in einzelne Listen zu schreiben. Warum dauert das so lange?
  • Es handelt sich um eine MVC 4 Anwendung
  • Es läuft in einem Thread

Ich bin für jeden Hinweis überaus dankbar.

Liebe Grüße,
Sythus

05.02.2015 - 10:26 Uhr

Hallo zusammen,

ich hatte erst überlegt ob mein Thema nicht zu Office Technologien gehört, war mir dann aber nicht so sicher.
Ich habe eine ASP.net Anwendung der in einem Order ptox Dateien zur Verfügung stehen. Was ich brauche ist eine Möglichkeit von jeder MasterSlide eines Powerpoint Dokuments ein Image zu speichern.

Ich habe für normale ppt Dateien schon eine Lösung gefunden. Doch wie auf die Masterslides?

Hat da jemand einen Anhaltspunkt für mich?


using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
       public static void CreateSlideImage(string pptFilePath, int slide, string exportPath)
        {
            Application pptApplication = new Application();
            Presentation pptPresentation = pptApplication.Presentations.Open(pptFilePath, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
            Console.WriteLine(pptPresentation.HandoutMaster.Shapes);

            pptPresentation.Slides[slide].Export(exportPath, "png", 320, 240);
        }

Vielen Dank
Systhus

22.12.2014 - 16:46 Uhr

Verstehe - danke, hatte es tatsächlich falsch verstanden... gibt es Möglichkeiten das ganze so zu erweitern das es für das genaue tracken reicht?

22.12.2014 - 10:25 Uhr

Hallo und entschuldigt die verspätete Antwort.

War wirklich sehr hilfreich - vielen Dank. Natürlich gibt mir die Aussage das OnDisconnect nur in 95% der Fälle geworfen wird etwas zu denken.

Irgendwelche Ideen wie man eventuelle Fehlerquoten abfängt oder korrigiert?

Gibt es die Möglichkeit eine Art Backgroundworker laufen zu lassen der unabhängig von einem Webseitenaufruf läuft? In diesem könnte man auf alte Sessions prüfen und ggf. auch ob ein Client noch da ist?

Danke schonmal und frohe Festtage!

Viele Grüße
Sythus

11.12.2014 - 15:29 Uhr

Hallo zusammen,

ich habe in meiner Asp.net Anwendung SignalR laufen und speichere die clientIds in einer statischen Liste.

Wie kann ich diese clientIds nun auf meine internen User mappen?

In meinen Controllern habe ich keinen zugriff auf die clientId bzw. connectionId des users der diesen Aufruf durchführt.

Fallbeispiel:

1.Webseitenaufrufe -> Controller erstellt Datensatz mit clientId in der Datenbank (die brauch ich) 1.User schließt die Webseite -> SignalR erkennt das und löscht den Datensatz mit der clientId aus der Datenbank

Ich habe viel recherchiert und nur Fallbeispiele gefunden wo man die userId von SignalR in eine statische Liste schreibt. Leider fehlt mir dabei komplett die zuordnung zu meinem AKTUELLEN User.

Danke für jeden Hinweis

PS: Ich versteh auch irgendwie nicht ganz warum SingalR nicht problemlos sessionbasiert laufen kann.. dann wär das so schön einfach... 😦

23.04.2014 - 14:47 Uhr

Hallo zusammen,

habe eine .net Framework 2.0 Konsolen Anwendung geschrieben die unter anderm eine Datei auf einen FTP Server hochladen soll.

Das Interessante ist, das die unter meinem Windows 7 gut läuft und die Datei erfolgreich übermittelt, auf einem Windows XP PC aber nicht.

Es wird die Fehlermeldung> Fehlermeldung:

The remote server returned an error: (550) File unavailable (e.g., file not found, no access) ausgeworfen.

Das ganze sieht folgendermaßen aus:


            FileInfo fileInf = new FileInfo(ioDaten.output);
            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverDaten.url + serverDaten.pfad + fileInf.Name);


            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            request.UseBinary = true;
            request.UsePassive = true;
            request.KeepAlive = true;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential(serverDaten.login, serverDaten.passwort);


            using (FileStream fs = File.OpenRead(ioDaten.output))
            {
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                fs.Close();
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(buffer, 0, buffer.Length);
                requestStream.Close();
                requestStream.Flush();
            }

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            Console.WriteLine("Erfolgreich" + Environment.NewLine + Environment.NewLine + "Status: {0}", response.StatusDescription);

            response.Close();

Jemand eine Idee? Vielen Dank im vorraus!

10.11.2012 - 20:03 Uhr

Hallo zusammen,

ich kann mir vorstellen das eine spezifische Frage zu HBCI etwas zu schwer zu beantworten wäre, und stelle diese deshalb etwas allgemeiner.

Bei HBCI gibt es das Datenformat Binär.

Dieses wird in die Textnachrichten die zwischen Kunde und Kreditinstitut versendet werden folgendermaßen eingestellt.

@Länge-Bytes@Binäre-Daten

Die Nachrichten an einen Bankserver werden base64 kodiert und dann per SSL versendet.
Ich frage mich nun, wie die Binären Daten in C# in die Nachricht eingestellt werden?

Wandel ich die "Strings" in ein Byte-Array um und setze sie einfach in den String ein? Oder als eine Folge von 1en und 0en?

Wie könntet Ihr euch vorstellen funktioniert das in c#? Die Spezifikation gibt mir die Antwort leider nicht.

Den String in Bytes zu konvertieren und mitzugschicken, führt zu einem 400er Returncode.

Vielen dank für jede Idee

Sythus

10.11.2011 - 15:29 Uhr

Du kannst die Datatable mit einem DataColumn vom Datentyp Byte Array erstellen.

Bindest du die Datatable dann an das DataGridView wird dafür automatisch ein entsprechender Column Typ verwendet.


            string picturePath = "bilder/bild.jpg";

            DataTable dataTable = new DataTable();

            DataColumn dcArNr = new DataColumn("Artikelnummer", typeof(string));
            DataColumn dcBild2 = new DataColumn("Bildpfad", typeof(string));
            DataColumn dcBild = new DataColumn("Bild", typeof(Byte[]));

            dataTable.Columns.Add(dcArNr);
            dataTable.Columns.Add(dcBild2);
            dataTable.Columns.Add(dcBild);
                       
            DataRow row = dataTable.NewRow();
            row.SetField<string>(dcArNr, "123456");
            row.SetField<string>(dcBild2, picturePath);

            // in der datatable muss das Bild dann als Byte Array vorliegen
            // z.B. so
            MemoryStream m = new MemoryStream();
            Image.FromFile(picturePath).Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
            row.SetField<Byte[]>(dcBild, m.ToArray());
  
            dataTable.Rows.Add(row);

            dataGridView.DataSource = dataTable;
26.10.2011 - 23:38 Uhr

Laut E-Mail Header handelt es sich bei dem Text um ein ISO-8859-1...

Ein weiterer Versuch sieht daher folgendermaßen aus:


                Byte[] byteArrIso = Encoding.GetEncoding("iso-8859-1").GetBytes(mail.Body);
                Byte[] byteArrUTF8 = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, byteArrIso);
                string encodedBody = Encoding.UTF8.GetString(byteArrUTF8);

Da mir der ContentType der E-mail ja sagt er sei ein ISO-8859-1, wandel ich
den Text in ein ByteArray und versuche anschließend das Bytearray von Iso zu UTF8 zu konvertieren.

Leider ohne erfolg, die umlaute werden nach wie vor nicht angezeigt.

Was mach ich Falsch? Wo ist mein Fehler?

26.10.2011 - 20:39 Uhr

Hallo zusammen,

Ich habe ein Encoding Problem beim abrufen von E-Mails mit imapX!
http://hellowebapps.com/products/imapx

Ich habe schon mehrere Sachen ausprobiert, unter anderem auch das:



       string encoding = m.HtmlBody.ContentType.Split('=')[1];
       string decodedBody = Encoding.GetEncoding(encoding).GetString(Convert.FromBase64String(m.HtmlBody.TextData));

Leider erhalte ich dabei folgenden Fehler:

Fehlermeldung:
Ungültige Zeichen in einer Base-64-Zeichenfolge.

Die HTML E-Mail Daten kommen als iso-8859-1 an. Die Umlaute werden alle nicht richtig angezeigt und ich kriege die Umwandlung in das richtige Format einfach nicht hin.

Zeichensätze machen mir leider schon immer Probleme und ich würde mich freuen wenn mir hier jemand den richtigen Tip geben könnte.

Vielen dank im vorraus

Sythus

13.10.2011 - 16:16 Uhr

Ja macht Sinn,

schade - aber danke!

13.10.2011 - 12:19 Uhr

Hallo zusammen,

ich versuche herauszufinden wann in einem WebBrowser Control
die geladene Seite ein Audiostream abspielt.

Ist das möglich? Selbst nach langer Suche bin ich noch kein Stück weiter.

Besten dank für einen Schubs in die richtige Richtung.

gruß
Sythus

12.08.2011 - 17:01 Uhr

Nope, nutze nicht das Client Profile.

Als Zielframework ist das ganz normale .Net 4.0 Framework eingestellt.

12.08.2011 - 16:30 Uhr

Hallo zusammen,

ich habe zur Zeit ein sehr merkwürdiges Problem.

Beim ausführen des von mir geschriebenen Programms auf einem anderen Rechner bekomme ich folgende Meldung:

Fehlermeldung:
Could not load file or assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Das System kann die angegebene Datei nicht finden.

.Net Framework 4.0 ist installiert -

Woran kann das liegen? Ist bei der .NET installation vll ein Fehler aufgetreten?
Unter Software sehe ich auch die anderen .Net Framewors 2.0, 3.5 und 4.0

Bin dankbar für jeden hilfreichen Tip

Gruß
Sythus

03.08.2011 - 10:07 Uhr

Unglaublich was damit alles möglich ist 😄 Auf so eine Lösung wäre ich nicht gekommen.

Vielen dank (euch beiden)

Gruß

02.08.2011 - 18:01 Uhr

verwendetes Datenbanksystem: Linq

Hallöchen,

ich versuche mich gerade in Linq einzuarbeiten, unter anderem hänge ich gerade an einer Linq Abfrage. Bin aber auch nicht sicher ob das was ich machen möchte wirklich möglich ist.

Folgende Struktur ist gegeben:

List<Monat>
-> List<Kunde>
-> List<string> Portale

In Monaten sind Kunden enthalten und in den Kunden wiederum die Portale durch die die Kunden gekommen sind. (Hoffe das ist halbwegs verständlich)

Ziel ist es nun, mit Linq eine Liste von Portalen zu erstellen in der jedes Portal nur einmal enthalten ist.

Ist das mit Linq möglich? Wie sähe das aus? Bekomme es nicht ansatzweise hin.

Vielen dank schonmal für jede Hilfestellung

Gruß

31.05.2011 - 10:46 Uhr

Danke dir, das gefällt mir gut. Werde nun ein eigenes Control für die Datensätze bauen das aus Textboxen und MemoeEits besteht.

Das ist die beste Lösung.

Merci!

30.05.2011 - 16:17 Uhr

Sorry ich habe es ein wenig "Waschig" erklärt

Ein Änderungserfassungsystem nimmt Änderungen an Angebots- und Stamm- datensätzen auf und speichert diese in eine extra Tabelle.

Die Änderungen vom vorherigen zum neuen Datensatz werden in einer extra Spalte erfasst.

(Soviel nur, damit klar wird worum es geht)

Ziel ist es nun, die Historie eines Datensatzes übersichtlich anzuzeigen.
Damit sofort gesehen werden kann, wann was geändert wurde.

Um das zu lösen wollte ich die Datensätze in einem DataGridView untereinander anzeigen. (nur die geänderten Felder - also werden die Felder die angezeigt werden je nach Datensatz dynamisch erzeugt)

Dabei gibt es Felder mit sehr kurzem Inhalt aber eben auch Felder wie das Memofeld wo sehr viel drin stehen kann. Da das DataGridView mit viel Daten in einer Zelle aber nicht zurecht kommt suche ich nach einer Alternative.

Vielleicht kommt ein ListView ja besser mit vielen Daten in einer Zelle zurecht?

Ich hoffe ich konnte mein Problem verdeutlichen.

Vielen dank schonmal 😃

30.05.2011 - 14:53 Uhr

Danke für den Tip.

Liegt also eindeutig an der Menge des Textes. Die Zelle ist wohl einfach nicht dafür gemacht soviel Text zu beinhalten.

Hat jemand vielleicht Alternativen? Was könnt ich denn sonst nehmen?

Das ganze dient eigentlich dazu Datensätze zu vergleichen und ein Feld des Datensatzes hat nunmal sehr viele Einträge da es sich um ein Memofeld handelt.

Jemand vielleicht eine Idee?

Sythus

30.05.2011 - 13:01 Uhr

Hallo Zusammen,

ich fülle per Datatable ein DataGridView.

Selbst wenn ich das Grid mit nur einer Zeile fülle dauert das Spaltenvergrößeren oder der typische Doppelklick damit das Grid automatisch die Größe der Spalte anpasst extrem lange.
Dazu muss ich auch sagen das in einer Zeller auch manchmal etwas mehr Daten stehen können (100 Zeilen aufwärts)

Nutze Windows 7 und bin leicht am verzweifeln da DataGridView doch eigentlich super schnell sein soll.

Habe auch schon die Forensuche bemüht und viel gefunden aber nichts was wirklich auf mein Problem passt.

Events nutze ich keine, auch keine AutoSize Funktionen.

Bin für jede Hilfe dankbar.

Gruß
Sythus

15.04.2011 - 22:49 Uhr

Vielen dank, damit hast du mir sehr geholfen 😃

der von dir gepostete Parser ist übrigens auch sehr nett.

Gruß

Sythus

15.04.2011 - 20:16 Uhr

Hallo zusammen,

warscheinlich garnicht so schwer aber ich kriege es leider nicht hin.

Ich möchte alle [url ]beispieltext[/url ] aus einem Text lesen.

Leider kriege ich das gierige verhalten nicht weg sodass ich z.B. immer soetwas bekomme:

[url ]irgendeintext[/url ] aisdjiasijasdj [url ]nocheintext[/url]

Im Forum habe ich schon einige Hinweise dazu gefunden leider versteh ich es nicht ganz. So soll es z.B. möglich sein das mit negativem Lookbehind das gierige Verhalten zu verhinden. Jedoch ist mir das bisher mit keinem meiner Muster geglückt.

(getestet mit Regex Tester)

mein bisheriges Pattern: [url].*[/url]

Ich habe es auch schon damit versucht zu sagen das danach kein Zeichen mehr kommen darf: [url].[/url][^.]

Ich bin dankbar für jede Hilfe.

Sythus

16.02.2011 - 10:07 Uhr

Hallo,

vielen dank!
Die Sache mit dem SSL wars... sowas simples..

Sorry! 😭

15.02.2011 - 18:08 Uhr

Hallo zusammen,

ich nutze System.net.Mail für den E-Mail versand.

Leider funktionieren nicht alle SMTP Ausgangsadressen, nur einige wenige gehen und ich habe bis jetzt nicht herausgefunden warum das so ist.

Bei denen die nicht funktionieren bekomme ich folgende Exception:

SmtpException
Fehler bei Transaktion. Die Serverantwort war: 5.7.1 <xxx@xxxx.de>: Relay access denied

xxx@xxxx.de ist natürlich im Normalfall die Email Adresse an die die Mail gehen soll.

Hier mein Code:


                MailMessage myMessage = new MailMessage();

                myMessage.To.Add(new MailAddress("xxxx@xxxx.de"));

                myMessage.From = new MailAddress(mailSendingInformation.AddressorEmail, mailSendingInformation.AddressorName);
                myMessage.Subject = "Subject";
                myMessage.Body = "Test Email";
                myMessage.BodyEncoding = Encoding.Default;

                myMessage.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("test", Encoding.Default, "text/html"));

                SmtpClient client = new SmtpClient(mailSendingInformation.Smtp);
                client.Credentials = new System.Net.NetworkCredential(mailSendingInformation.Username, mailSendingInformation.Password);

                client.Send(myMessage);


Wäre super wenn da jemand weiter weiß. Ist das eine Sache des Email Providers oder fehlt lediglich eine wichtige Angabe im Code?

Danke und schönen Gruß

Sythus

05.11.2010 - 19:39 Uhr

Hallo,

Habe dafür nun eine Lösung gefunden die funktioniert.
Mit der free FTP Lib von http://www.enterprisedt.com/ habe ich eine Methode geschrieben die bei Abbruch einfach neu connected und die Datei weiterschreibt.

Leute mit ähnlichem Problem wie ich könnte diese sicher helfen:



public static void UploadFile(string host, string user, string password, string file, int maxTries = 5)
        {
            int tries = 1;

            bool completed = true;

            FTPClient ftp = new FTPClient();

            ftp.RemoteHost = host;

            do
            {
                if (!ftp.IsConnected)
                {
                    ftp.Connect();
                    ftp.Login(user, password);
                    ftp.ConnectMode = FTPConnectMode.PASV;
                    ftp.TransferType = FTPTransferType.BINARY;
                }

                if (!completed)
                {
                    if (tries > maxTries)
                    {
                        throw new Exception("FTP Upload: Die Datei " + file + " konnte nach " + tries + " Versuchen nicht hochgeladen werden. Vorgang wurde abgebrochen.");
                    }
                    ftp.Resume();
                    tries++;
                }

                try
                {
                    ftp.Put(file, file);
                    completed = true;
                }
                catch (IOException)
                {
                    completed = false;
                }

            } while (!completed); 
        }


Soetwas lässt sich bestimmt auch mit der FTPWebRequest Klasse aus dem dot.net Framework lösen aber ich weiß zumindest nicht wie - falls das einer weiß kann er das ja hier posten.

Gruß
Sythus

03.11.2010 - 12:08 Uhr

Hallo,

leider hatte ich mit den Tips keinen Erfolg.

Das Timeout ist Standardmäßig auf 120 Sekunden eingestellt. Der Upload bricht aber Variabel ab.. mal nach 30 Minuten mal, nach 45.. ziemlich unterschiedlich also.

Und wie ich dem Server während dem Upload COmmands schicken kann weiß ich leider uach nicht.

Ich bin ziemlich am verzweifeln.

Dafür muss es doch eine Lösung geben oder?

Gruß
Sythus

03.11.2010 - 07:30 Uhr

Hi,

danke für eure Ideen ich werde beides mal testen.

Gruß,

Sythus

02.11.2010 - 15:21 Uhr

Hallo zusammen,

ich habe ein Problem beim uploaden einer großen Datei (max. 300mb)
Habe ftpWebRequest sowie eine ftplibrary ausprobiert - überall das gleiche!

Manchmal wird die Datei fehlerfrei übetragen, ein anderesmal bricht die Übetragung willkürlich mit folgender Meldung ab:

"In die Übertragungsverbindung können keine Daten geschrieben werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen"

Kurz: Der Server hat einfach dicht gemacht.

Nun ist es aber auch nicht so das das nur bei einem FTP Server wäre.. es passiert bei jedem, egal welchen ich verwende.

Googel und die Forensuche haben mir nur insofern weiter geholfen das ich weiß das dass kein unbekanntes Problem ist.

Eine Lösung dafür gab es aber nicht.

Ich bin leicht am verzweifeln.

Kennt jemand dafür eine Lösung?

Danke und schöne Grüße,

Sythus

17.10.2010 - 15:40 Uhr

Danke für die Info. Welche alternativen gäbe es denn? Würde eben gerne in einer Tabelle Items die Zusammengehören irgendwie kennzeichnen.

Danke + Gruß 😃

17.10.2010 - 12:10 Uhr

Hallo zusammen,

ich würde gerne in einem Datagridview verschiedene Datensätze mittels Expander zusammenfassen. Ungefähr so wie im Dateianhang!

Allerdings finde ich darüber keine wirklich vollständigen Beispiele und ich kriegs ehrlich gesagt einfach nicht hin. Habe herausgefunden das man dazu warscheinlich mehrere Tabellen erstellen muss und diese dann irgendwie in Beziehung setzen?

Kann mir da eventuell jemand auf die Sprünge helfen?

Wäre super.

Danke und schöne Grüße,

Sythus

20.09.2010 - 15:53 Uhr

verwendetes Datenbanksystem: System.Data.SQLite

Hallo zusammen,

ich nutze eine SQL Lite Datenbank in meiner Anwendung und bin nun zu dem Punkt gekommen wo zwei verschiedene Threads zur gleichen Zeit eine Datenbankabfrage ausführen wollen.

Ehrlich gesagt habe ich mir davor nicht wirklich Gedanken gemacht, das dies ein Problem werden könnte. Ich ging davon aus das ein mehrfacher Zugriff ohne Probleme möglich sei.. (warum auch immer)

Jedoch bekomme ich nun immer die Meldung/Exception "Database file is locked".

Das liegt wohl ganz einfach daran das während einer Abfrage, eine andere längere Abfrage noch am Arbeiten ist.. bzw. ein reader offen..

Gibt es dafür eine Lösung? Ist es denn überhaupt möglich das 2 reader zur gleichen Zeit auf eine Datenbank Datei zugreifen?

Bin für jeden Hinweis und jede Hilfe mehr als dankbar.

beste Grüße

Sythus

17.09.2010 - 11:43 Uhr

Hallo Zusammen,

ich bin im Zusammenhang mit SharpZipLib auf ein sehr nerviges Problem gestoßen.

Ich lade bestimmte Ziparchive auf einen FTP. Diese Zip Archive werden dann von einer Fremdsoftware verarbeitet.

Da gibt es nun Probleme.

Laut Supportmitarbeiter läge es daran das meine Archive in der Version 40 gepackt werden. Sie könnten aber nur mit Archiven der Version 21 umgehen.

Hat jemand in der Sache schon Erfahrung und weiß wie Archive der Version 21 erstellen kann?

Bin dankbar für jeden Hinweis.

Mfg

Sythus

15.09.2010 - 15:11 Uhr

Damit hat es super geklappt 😃

Merci!

14.09.2010 - 20:47 Uhr

Hallo gfoidl

und herzlichen dank 😃
Sehr verständlich und echt Super!!!!

Wird mir in der Zukunft sicher helfen!

Ein Problem hatte ich nun beim nachbauen allerdings.

Wie kriege ich das damit erstellte Image, zentriert auf ein anderes?

Beim Text war das kein Problem, dank textFormat.. Aber so..

Also genauer:

Ich erstelle einen Text als Bitmap und möchte diesen zentriert auf ein anderes legen.
Ich weiß allerdings nicht wie groß das erstellte TextBitmap ist.

Danke + Schöne Grüße

Sythus

14.09.2010 - 17:24 Uhr


            Bitmap bitmap = new Bitmap(path);
            Graphics g = Graphics.FromImage(bitmap);
            
            StringFormat strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;

            Font font = new Font("Tahoma", 30);

            g.DrawString("Text oben", font, Brushes.Black,
                new RectangleF(0, 10, bitmap.Size.Width, bitmap.Size.Height), strFormat);

            g.DrawString("Text unten", font, Brushes.Black,
                new RectangleF(0, bitmap.Height - (font.Size * 2), bitmap.Size.Width, bitmap.Size.Height), strFormat);

            Matrix m = new Matrix();
            m.Scale(1.01f, 1.01f);
            g.Transform = m;

            g.DrawString("Text oben", font, Brushes.Azure,
                new RectangleF(-2, 10, bitmap.Size.Width, bitmap.Size.Height), strFormat);

            g.DrawString("Text unten", font, Brushes.Azure,
                new RectangleF(-3, bitmap.Height-(font.Size*2)-3, bitmap.Size.Width, bitmap.Size.Height), strFormat);

            g.Save();
           
            return bitmap;


Die x und y Werte habe ich nach dem Transform so angepasst das es halbwegs auf allen Bildern passt.

Das bitmap.Height-(font.Size*2) habe ich reingemacht da der Text am unteren Rand manchmal nur halb zu sehen war, manchmal aber auch komplett.

Je nach Bildgröße und Format...

Wär super wenn du da ne Idee hast 😄

Danke

Gruß
Sythus

14.09.2010 - 17:15 Uhr

Ohjeohjeohje ^^ 😃

Danke für eure vielen Antworten.

Gut, ich denke das mit der Helligkeit kann ich aufgeben. Ist zu komplex für eine Sache an der ich eigentlich nicht ganz solange sitzen wollte.

Danke dafür.

Habe nun mit Matrix.Scale probiert einen schwarzen Text hinter einen weißen zu setzen. Den Schwarzen habe ich dabei um 0.01 x und y vergrößert.
So habe ich eine Art schwarzen Schatten.. oder auch eine 3D Wirkung die auf jedenfall schon besser zur Geltung kommt als eine reine weiße Schrift.

Allerdings so wie ich es erst vorhatte (gleichmäßigen schwarzen Rand um die weiße Schrift) habe ich es nicht hinbekommen.

Der Abstand der skalierten zur unskalierten Schrift war nämlich je nach Bildgröße und Format unterschiedlich. Total Seltsam 😄

Naja

Danke !!!! 😃

Gruß
Sythus

14.09.2010 - 15:55 Uhr

Hallöchen,

nach langem googeln möchte ich es mal hier versuchen 😃

Es geht darum Text auf Bilder zu setzen.
Wie das funktioniert weiß ich schon.

Allerdings sind die Bilder sehr unterschiedlich, mal heller Hintergrund, mal dunkler.

Der Text soll aber auf jedem Bild gut lesbar sein.

Also dachte ich mir, lesen wir doch einfach die Helligkeit aus und versuchen daran festzumachen, mit welcher Textfarbe wir das Bild belegen.

Dazu habe ich eine Funktion gefunden:


private double GetBitmapBrightness(Bitmap bitmap)
        {
            const int PropertyTagExifBrightness = 0x9203;
            double result = 0;

            //bitmap.GetPropertyItem(0x9203);
            for (int i = 0; i < bitmap.PropertyItems.Length; i++)
            {
                PropertyItem item = bitmap.GetPropertyItem(0x9203);
                if (item.Id == PropertyTagExifBrightness)
                {
                    if (item.Len == 8)
                    {
                        int numerator = BitConverter.ToInt32(item.Value, 0);
                        int denominator = BitConverter.ToInt32(item.Value, 4);

                        result = numerator / (double)denominator;
                    }
                    else if (item.Len == 16)
                    {
                        long numerator = BitConverter.ToInt32(item.Value, 0);
                        long denominator = BitConverter.ToInt32(item.Value, 4);

                        result = numerator / (double)denominator;
                    }
                    break;
                }
            }
            return result;
        }

Leider scheint der Wert 0x9203 für die Helligkeit in keinem Bild zu existieren. Googel verrät mir auch nicht den korrekten.

Hat jemand von euch eine Idee? Oder gar einen besseren Ansatz um mein oben beschriebenes Problem zu lösen?

Ich dachte notfalls schon daran das Bild mit einem Text zu belegen der aus 2 Farben besteht. Innen weiß, mit einem schwarzen Rand. Allerdings fehlt mir auch hier jeder Ansatz soetwas hinzukriegen.

Vielen Dank schonma,

Gruß,
Sythus

19.08.2010 - 13:42 Uhr

Hallo,

mit XSD habe ich auf der XSD Datei schon Klassen erstellt. Allerdings habe ich keine Ahnung wie ich diese benutze, bzw. mit Daten fülle und daraus eine passende XML Datei erzeuge.

Gibt es da irgendwo irgendwie eine Art Tutorial das soetwas zeigt? Ich finde leider diesbezüglich garnichts in Google was mich weiterbrächte.

19.08.2010 - 13:05 Uhr

verwendete Datenstruktur: XML, XSD

Hallo zusammen,

ich habe schon einiges im Netz darüber gefunden aber nichts was mir wirklich weiter geholfen hätte.

Ich habe eine XSD Datei und frage mich welche Möglichkeiten es in C# gibt daraus eine Art Klassenstruktur zu erstellen mit der ich passende XML Dateien erstellen kann.

Ich stelle mir das irgendwie so vor das ich ein Objekt mit Daten fülle und daraus dann die passende XML Datei erstellt wird.

Da gibt es doch bestimmt schon tolle Lösungen oder?

Habe da zwar schon was von XSD gelesen, aber dabei ging es eher darum eine XML Datei gegen eine XSD zu validieren...

Ansonsten würd ich mich daran machen eine Klasse zu schreiben die die XML stück für stück erstellt... Ist aber doch sehr umständlich...

Danke für alle Tips

Sythus