Original von Hitman II
... und auch noch ein Sonnenuntergang...mfg Hitman
WOW!
Sieht recht lecker aus!
Als erstes entschuldigt bitte das Aufwärmen.
Hat keiner von euch je das Problem gehabt, Strings mit Zeilenumbrüchen in ein XML-Element zu packen?
Ich habe mir jetzt schon einen Wolf zu dem Thema gesucht, aber leider nichts gefunden.
Wenn irgendwer etwas dazu hat(egal was), dann möge er es bitte hier posten.
Grüße und vielen Dank im Voraus, Christoph
Original von Kostas
...OR-Mapper oder reiner ADO.NET?
Schau mal auf folgendes Event: http://persistenceday.dotnetpro.de
siehe Werbung links!
Vielleicht gibt es in den Ereignisdaten ein e.Node, was die aktuelle Node angibt.
Setz doch mal deine kompletten Windowsfarbeinstellungen zurück und probier das nochmal.
Vielleicht ist da etwas im Argen, denn intern ist das ganze ja sowieso Win32.
Ich serialisiere ein Objekt und habe darin Strings, die einen Zeilenumbruch enthalten(probiert mit /r/n, /r, /n und Environment.NewLine(also auch /r/n unter Windows)) .
Wenn ich das Objekt mit den Strings jetzt serialisiere, habe ich nachher in den Strings 
 oder nur 
 oder 
.
Ist das Standard für XML und wird von allen Parsern so erkannt, oder was muss ich nehmen um Zeilenumbrüche zu markieren.
Bzw. nimmt man vielleicht nur 
 oder nur 
?
Grüße Christoph
Das hatte ich mal vor ewiger Zeit in Turbo-Pascal(oder schon Delphi) gelöst. Ich glaube mit neuronalen Netzen und der Flut-Methode. Brut-Force konnte man vergessen, allenfalls Brut-Force mit Abbruchbedingung(versuche 5 Millionen zufällige Verbindungen, nehme die kürzeste).
Die Flut-Methode heißt glaube ich auch noch anders. Ist leider bei Wikipedia nicht viel drüber zu lesen.
Dazu ist diese Komponente zu empfehlen:
http://www.mentalis.org/soft/class.qpx?id=8
Ist komplett lizenzfreier Code.
Danke für eure Hilfe.
Dann werde ich wohl nur einen einfachen Durchgang machen, wo alles mit Random Daten vollgeschrieben wird.
Gibt es noch andere kostenlose Tools, die das können?
Der Erasor schafft bei mir nur ca. 40 KB pro Sekunde.
Nimmst du das Gutmann-Verfahren oder Random Data?
Und wieviele Durchläufe muss man machen um sicher zu sein, dass die Daten auch von Profis nicht mehr wiederhergestellt werden können?
Danke erstmal für den Tipp!
Grüße, Christoph
Ich möchte auf meinem Rechner Dateien restlos löschen, bzw. Dateien die schon gelöscht sind sollen auch wirklich hardwaretechnisch weg sein. Das ganze soll auf der aktiven Partition laufen(der, auf der Windows liegt).
Alle anderen Dateien sollen natürlich da bleiben.
Quasi ein Low-Level Format nur für gelöschte Dateien.
Gibt es da ein Programm für?
Grüße Christoph
Danke, das sollte soweit helfen!
Kann ich in einem überladenen Konstruktor einen anderen Konstruktor der gleichen Instanz aufrufen?
also praktisch so:
public class IchStinke{
private string _name;
private DirectoryTest dt;
public IchStinke()
{
this.dt = new DirectoryTest();
}
public IchStinke(string newname)
{
this._name = newname;
//hier soll der Standardkonstruktor aufgerufen werden, damit DirectoryTest initialisiert wird
}
}
Geht das?
(Ich weiß, dass ich auch gleich private DirectoryTest dt = new DirectoryTest(); machen kann, aber das soll ja ach nur ein Beispiel sein).
Danke, mit diesen Informationen sollte ich eine Weile auskommen
Ich werde mir die Software mal anschauen. Danke für die Tips!
Ist die Software bootfähig?
Habe nämlich nicht nur die Platte, sondern auch den Rechner dazu. Und dann muss ich die nicht umbauen.
Grüße und vielen Dank nochmals, Christoph
Ich habe eine Festplatte bekommen von der ich Daten retten soll.
Die Partitionsdaten sind noch in soweit vorhanden, dass eine Partition angezeigt wird, allerdings als Typ: unbekannt.
Mit welchem Rettungstool kann ich die Daten auf dieser Platte am einfachsten wiederherstellen?
Wie gesagt: Die Partitionsdaten sind zerschossen.
Am Besten wäre ein kostenloses Tool, aber wenn das ein wenig Geld kostet muss man das halt investieren. Professioneller Datenretter kommt erstmal nicht in Frage.
Ach ja, ist recht zeitkritisch(deswegen sitze ich auch am Sonntag Abend noch daran).
Grüße Christoph
Deswegen habe ich ja vorsichtashalber das "(auch wenn man das vielleciht nicht ganz so nennen kann)" dazu geschrieben. Das sollte nicht mit einem typisierten Dataset verwechselt werden, sondern mit typisiert war gemeint, dass die Typinformationen für die Spalten festgelegt wurden.
Ist das damit geklärt?
Original von Quallo
Das liefert mir ein leeres Ergebnis, aber die Spalteninformationen werden angezeigt, das Dataset ist also typisiert(auch wenn man das vielleciht nicht ganz so nennen kann).
Es ist mir schon klar, dass das kein typisiertes Dataset ist. Es sind jetzt aber(zumindest für diese Tabelle) die Typinformationen sowie Namen der Spalten in dem Dataset, wenn ich das jetzt an das Datagrid binde habe ich dort eine leere Tabelle des gleichen Typs wie der Table auf den ich die Select-Anweisung angewendet habe.
Sollte aber eigentlich ganz deutchlich aus dem Thread hervorgehen, dass das so gedacht ist.
Ich mache jetzt "Select * from Table where Rownum < 0".
Das liefert mir ein leeres Ergebnis, aber die Spalteninformationen werden angezeigt, das Dataset ist also typisiert(auch wenn man das vielleciht nicht ganz so nennen kann).
Sieht jemand den Fall, dass diese Lösung kaputt geht?
Ich denke, dass es auch bei anderen Datenbanken die Möglichkeit gibt, das Ergebnis künstlich auf null Ergbenissätze zu begrenzen.
Grüße Christoph
Klappt jetzt folgendermaßen:
//von pinvoke.net:
[DllImport("shell32.dll")]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken,
uint dwFlags, [Out] StringBuilder pszPath);
//von mir, jetzt auch bei pinvoke.net:
StringBuilder SB = new StringBuilder();
SHGetFolderPath(IntPtr.Zero,0x0019,IntPtr.Zero,0x0000,SB);
DesktopPath = SB.ToString();
SB = new StringBuilder();
SHGetFolderPath(IntPtr.Zero,0x0016,IntPtr.Zero,0x0000,SB);
StartMenuPath = SB.ToString();
Wenn jemand eine Managed-Only Lösung hat, bitte her damit.
Grüße Christoph
Original von svenson
Schade, dass mein Kaltwalzwerk gerade renoviert wird, sonst könnte ich es gut gebrauchen... 🙂
Meins ist eingelaufen, zu heiß gewaschen. Deswegen bin ich im Moment auf das von meiner Mutter angewiesen und das darf ich nicht modifizieren.
@norman_timo: Glückwunsch!
Habe ich natürlich schon gelesen.
Aber muss das denn wirklich alles so kompliziert sein?
Eine nette eingebaute Funktion fände ich hübscher.
Wenn ich ein Select-Befehl ausführe übernimmt er ja auch alle Spaltenbezeichnungen und Typen.
Wieso geht das nicht ohne Select-Befehl?
Ich will ja nichts auswählen, ich will Spalten einfügen!
Wie bekomme ich die Pfade für oben genannte Verzeichnisse heraus?
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) liefert das Verzeichnis für den aktuellen Benutzer.
Grüße Christoph
@MAjBO: Es handelt sich um Oracle.
Ich bin dabei ein Datenbanktool für den firmeninternen einsatz zu schreiben.
Es sollen(nicht für alle Tabellen) nur Datensätze hinzugefügt werden können, es sollen keine gelesen oder gelöscht werden können.
Wie ist es nun möglich die Spaltenkopfinformationen für eine Tabelle in der Datenbank zu kriegen.
Sobald ich eine Zeile aus der Datenbank in das Dataset lese habe ich die Informationen über die Spalten im Datagridview drin und kann eine neue Zeile erstellen.
Wie kann ich das hinbekommen, ohne über ein Select Daten abzurufen?
Gibt es keine Befehl, der mir nur die Spalteninformationen für eine Zeile abruft?
Grüße Christoph
Guck dir mal alle Veränderungen im Code und die dazugehörigen Attribute an, auch im SDK.
Wenn dann noch Fragen sind kannst du die gerne stellen. Sonst habe ich leider zu wenig zeit im Moment.
Grüße, Christoph
Leicht abgewandt geht es!
Wäre sehr nett wenn jemand anderes noch ne bessere Lösung hat, ich schlage mich schon seit einiger Zeit mit einem anderen Problem rum, deswegen habe ich mich hiermit auch beschäftigt.
Grüße Christoph
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
using System.Text;
namespace WindowsApplication2
{
/// <summary>
/// Zusammenfassung für Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Erforderlich für die Windows Form-Designerunterstützung
//
InitializeComponent();
//
// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
//
}
/// <summary>
/// Die verwendeten Ressourcen bereinigen.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(48, 48);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(672, 554);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
// *******************************************
// Read configuration File and sort the Report
// *******************************************
StreamReader sr = new StreamReader(@"C:\test3.xml");
XmlTextReader xtr = new XmlTextReader(sr);
config xmlConfig = (config) new XmlSerializer(typeof(config)).Deserialize(xtr);
xmlConfig.chapters = new configChaptersChapter[] { new configChaptersChapter(),new configChaptersChapter()};
xmlConfig.chapters[0].id = "5";
xmlConfig.chapters[1].id = "7";
new XmlSerializer(typeof(config)).Serialize(new XmlTextWriter(@"C:\test4.xml",Encoding.Unicode),xmlConfig);
}
}
//------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.1.4322.2032
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by xsd, Version=1.1.4322.2032.
//
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class config
{
public configPreferences preferences;
[XmlArrayItem(Type=typeof(configChaptersChapter), ElementName = "chapter") ]
public configChaptersChapter[] chapters;
public configOwner owner;
}
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class configPreferences
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string title;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string watermark;
}
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class configChaptersChapterContent
{
public configChaptersChapterContent()
{
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string data;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string movies;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string images;
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value;
}
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class configChaptersChapter
{
public configChaptersChapter()
{
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id;
/// <remarks/>
[XmlArrayItem(Type=typeof(configChaptersChapterContent), ElementName = "content")]
public configChaptersChapterContent[] contents;
}
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class configOwner
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string name;
}
}
Auch die XML-Datei habe ich verändert:
<?xml version="1.0"?>
<config>
<owner>
<name>Markus</name>
</owner>
<chapters>
<chapter id="0">
<contents>
<content id="0" data="1" movies="0" images="0">Blub</content>
<content id="1" data="1" movies="0" images="0">Blab</content>
<content id="2" data="1" movies="0" images="0">Blah0</content>
</contents>
</chapter>
<chapter id="1">
<contents>
<content id="0" data="1" movies="0" images="0">Blah1</content>
</contents>
</chapter>
<chapter id="2">
<contents>
<content id="0" data="1" movies="2" images="3">Blah2</content>
</contents>
</chapter>
</chapters>
<preferences>
<title>Blahreport</title>
<watermark>D:\blah.jpg</watermark>
</preferences>
</config>
Als Diskussionsgrundlage habe ich noch einmal das hier, klappt aber auch nicht(ist nur besser, als über object[] Item):
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class config
{
public configPreferences preferences;
[XmlArrayItem(Type=typeof(configChaptersChapter),IsNullable = false) ]
public configChaptersChapter[] chapters;
public configOwner owner;
}
/// <remarks/>
public class configPreferences
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string title;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string watermark;
}
/// <remarks/>
public class configChaptersChapterContent
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string data;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string movies;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string images;
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value;
}
/// <remarks/>
public class configChaptersChapter
{
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id;
/// <remarks/>
[XmlArrayItem(Type=typeof(configChaptersChapterContent))]
public configChaptersChapterContent[] content;
}
/// <remarks/>
public class configOwner
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string name;
}
Kleiner tip, erstelle mal per Code solche Testobjekte und serialisiere sie dann.
guck dir dann die Datei an, die herauskommt.
Dann poste doch auch mal die Klasse, den kompletten Code und die Fehlermeldungen, sonst können wir nichts machen!
Du brauchst zum deserialisieren einen öffentlichen Standardkonstruktor.
Für root also:
public Root()
{
hier Konstruktorlogik oder auch nichts
}
Für point brauchst du das auch!
Das mag sein, aber dann hat man es wahrscheinlich sowieso schon zugeschickt bekommen.
Ich würde für XML eigentlich nie über das DataSet gehen, man kann aus einer XML-Datei per Deserialisierung ein Objekt erstellen und auch andersrum.
Der Code im ersten Beitrag sieht schon recht gut aus, was ist denn die genaue Fehlermeldung und an welcher Stelle tritt sie auf?
Es gibt im Board leider keine Hellseher g
Man kann 4 DVD's bestellen.
Herunterladen kann man das m. E. nicht, aber die 10€ sollte man wohl noch haben.
In VS2005 ist das integriert.
Reverse Engineering und Änderungen am Klassendiagramm schlagen auch auf den Code durch.
War zu faul um zu warten, ist irgendwie recht trivial, aber ein SUPER BEISPIEL FÜR REKURSION!
private static void CheckTreeNode(TreeNode CheckNode)
{
foreach(TreeNode CurrNode in CheckNode.Nodes)
{
CurrNode.Checked = CheckNode.Checked;
CheckTreeNode(CurrNode);
}
}
Aber aufgepasst, das man kein AfterCheck Event hat, was diesen Code nochmals aufruft!
Man allersings im AfterCheckEventHandler folgendes tun:
if(e.Action != TreeViewAction.Unknown)
{
code...
}
Dieser Code wird nur ausgeführt, wenn auch wirklich im TreeView per klicken oder Tastatur der Haken gesetzt oder entfernt wurde.
Im Endeffekt wollte ich auch noch, dass alle darunterliegenden Nodes aktiviert werden.
Der Code sieht jetzt insgesamt so aus:
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Action != TreeViewAction.Unknown)
{
CheckTreeNodeChilds(e.Node);
if(e.Node.Checked)
{
CheckTreeNodeParents(e.Node);
}
}
}
private static void CheckTreeNodeChilds(TreeNode CheckNode)
{
foreach(TreeNode CurrNode in CheckNode.Nodes)
{
CurrNode.Checked = CheckNode.Checked;
CheckTreeNodeChilds(CurrNode);
}
}
private static void CheckTreeNodeParents(TreeNode CheckNode)
{
if(CheckNode.Parent != null)
{
CheckNode.Parent.Checked = CheckNode.Checked;
CheckTreeNodeParents(CheckNode.Parent);
}
}
Suchworte: TreeView , Check , Rekursion , TreeNode , TreeNode.Checked ...
Guten Tag die Damen und Herren!
Folgendes:
Ein TreeView, CheckBoxes = true;
Wenn ich jetzt eine Node aktiviere, möchte ich, dass alle Nodes die darunter liegen auch aktiviert werden.
Gibt es da etwas eingebautes für?
Wenn nicht, dann mach ich mir das eben seber.
Grüße Christoph
Original von svenson
Grundsätzlich finde ich auch Innvoation in dem Bereich begrüßenswert. Wenn man mal ehrlich ist, sind solche wirklich revolutionären Ansätze in letzter Zeit doch ziemlich selten zu finden. Ebenfalls diskutieren wird ja, bestimmte Merkmale funktionaler Programmiersprachen aufzunehmen. Dem wäre ich auch nicht abgeneigt.
Welche Merkmale wären das?
Mal nach Rekursion suchen.
Und vielleicht mal bei wikipedia reinschauen.
In gewissen Dingen hast du recht.
Aber ich sag mal so, es gibt mehrere Installationen, die allesamt auf den gleichen Soll-Stand führen sollen.
Ob dies auch der Fall ist, wäre abzuprüfen.
Nach kurzem Anschauen sieht es so aus, als wenn InstallWatch nicht genau das richtige ist.
Es müssen die Veränderungen nicht nur aufgezeichnet, sondern auch mit einer Referenz verglichen werden.
Hi!
Kennt ihr ein Tool, das die Änderungen, die eine Installation an einem System vornimmt(dateien, dlls, registry), als Ist-Zustand nimmt und einen Vergleich mit einem Soll-Zustand macht?
Soll heißen, ich definiere irgendwie, was an einem Zielsystem verändert werden muss und prüfe dann nach der installation was wirklich verändert wurde und was nicht geklappt hat.
Hallo meine LieblingsCommunity!
Polter! Krach! AUA!!!
Verflucht, ich bin auf der Schleimspur ausgerutscht. g
Nun zur Frage: Ist es möglich .NET Programme(Consolen Programme) über Mono laufen zu lassen, OHNE dass man Mono installiert(die Mono Dateien können mitgeliefert werden).
Also praktisch möchte ich die Mono.exe und die Bibliotheken in mein Anwendungsverzeichnis packen und dann das Programm via Mono.exe Programm.exe starten.
Geht das?
Grüße Christoph
Nach ein paar stichprobeartigen Tests sah es so aus.
Wäre interessant das nochmal genauer zu überprüfen.
Grüße Christoph
Danke!
Habe allerdings gerade festgestellt, dass meine Oracle-Datenbank das selber macht, wenn ich die Daten einfüge.
Grüße Christoph
Math.Round macht keine kaufmännische Rundung, sondern rundet leider erst bei .6 auf.
Gibt es da eine Lösung?
Grüße Christoph
Im Moment mache ich es auch selbst.
Finde es nur immer eleganter eingebaute Funktionen zu benutzen.
Gibt es denn nicht soetwas wie eine Paintbox, die bei transparenten Pixeln nicht die Backgroundcolor zeichnet, sondern die dahinterliegenden Controls?
Grüße Christoph
Klappt gut.
Kurze Zusammenfassung: Man kann die Farbwerte der Instanzen von Color über .ToArgb() vergleichen.