Hallo martin_salo,
du könntest eine temporäre Tabelle erstellen (ID, Datum).
Diese dann mit den tatsächlichen Datumswerten füllen und per Inner Join mit der Rechnungstabelle verknüpfen.
Ich würde dir eher zu Zertifizierungen raten, die technologieunabhängig sind.
Hast du dafür auch Beispiele?
Hallo Schildkroete,
dazu ist noch zu sagen, dass bei Änderungen an Listen, die für Datenbindung verwendet werden oft nicht die Operation an sich das Problem ist, sondern die Aktualisierung der gebundenen Controls.
Viele Controls, die Listen darstellen (wie Grids) können deshalb die Aktualisierung der GUI zeitweise aussetzen.
Ich weiß nicht, ob das in deinem Fall zutrifft, aber such mal nach
Grid.BeginUpdate();
Grid.EndUpdate();
Alternativ dazu könntest du evtl. die Verbindung des Grids zur Liste vorübergehend trennen...
Hallo,
ich glaub mit iTextSharp müsste das auch gehen...
Hallo,
du kannst das Application.DocumentBeforeSave - Ereignis abonnieren
Dort wird als erster Parameter ein Document mitgegeben.
Den Pfad erhälst du über Document.Path
Das kann ich dir jetzt nicht glauben.
Es gibt ja keine Verbindung zwischen den Zeilen, also wird die Bedingung auf jede Zeile extra angewandt.
Deine Vermutung ist richtig 😉
evtl so:
IsNull(Feld, 'Hallo') = 'Hallo'
Was bedeutet:
DataRow[] foundRows = tableAbruftyp.Select("ISNULL(Aenderungsschluessel, '" + strAenderungsschluessel + "') = '" + strAenderungsschluessel + "' and ISNULL(Verwendungsort, '" + strVerwendungsort + "') = '" + strVerwendungsort + "' and ISNULL(FertigungsbereichKennzeichen, '" + strFertigungsbereichKennzeichen + "') = '" + strFertigungsbereichKennzeichen + "' and ISNULL(Terminschluessel, '" + strTerminschluessel + "') = '" + strTerminschluessel + "'");
Btw: Ein Formatstring wär hier sicher übersichtlicher...
Jo, habs jetzt damit probiert, allerdings liefert es nicht das was ich oben beschrieben habe...
Das sollte es aber...
Zeig doch mal den Code.
Klick mal auf den Link, dann siehst du, dass IsNull sehr wohl verwendbar ist.
System.Diagnostics.Process.Start(path, "/A \"page=" + seitenzahl + "\"");
So würde ich das mit diesem Link verstehen...
Genau falsch:
System.Diagnostics.Process.Start("acrord32", "/A \"page=" + seitenzahl + "\" \"" + path + "\"");
Hallo S_teffi,
Ich brauche die Funktionalität, in meinem Programm PDF's auf einer bestimmten Seite anzeigen zu können (mir wär's eigentlich auch schon egal, wenn dazu der Reader aufgehen würd, nur dem krieg ich irgendwie die Seitenzahl nicht übergeben 😦)
So kannst du ein Dokument im Acrobat-Viewer an einer bestimmten Seite öffnen:
acrord32 /A "page=5" "C:\Probe.pdf"
Hat da schon jemand was herausgefunden?
Ich möchte auch einen gewöhnlichen Indexer auslesen:
Document.TablesOfContents[0].Range.Text
Hallo,
wie ich das sehe, hat das Attribut Bindable nichts damit zu tun.
DateTime ist eine Struktur, und hat deshalb Immer einen Wert, da kann der Designer nichts dafür.
Eventuell ist es für dich besser den Datentyp
Nullable<DateTime>
bzw.
DateTime?
zu verwenden.
Dieser kann dann den Wert null enthalten.
Hallo myUnderTakeR
probier mal die Property innerhalb des typisierten DataSet als
Nullable<DateTime>
bzw.
DateTime?
zu deklarieren.
Hallo #coder#
Du könntest versuchen einen Filter zu setzen.
ds.Tables[0].DefaultView.RowFilter = "DetailTable.Count() > 0"; // ungetestet
Hallo,
so würde es auch ohne UK funktionieren:
Select Max(a.datum1), Min(a.datum2), If(GrpHelper.GRP = 0, 0, @rownum := @rownum + 1) GRP1 , a.kw
From (SELECT @rownum:=0) RN,
PROBE a inner join (Select if(Max(b.datum1) < Min(b.datum2), 0, 1) GRP, b.kw
From PROBE b
Group By kw) GrpHelper
on a.kw = GrpHelper.kw
Group By GRP1, a.kw
Hallo demondriver235,
ich hab mal was zusammengehackt.
Ich gehe allerdings davon aus, dass die Tabelle einen eindeutigen Schlüssel hat (in der Abfrage heißt das Feld "ID"), den ich zum Gruppieren "missbrauche".
Es funktioniert soweit ganz gut, allerdings bezweifle ich, dass die Performance bei vielen Datensätzen noch gewährleistet ist....
Select Max(a.datum1), Min(a.datum2), If(GrpHelper.GRP = 0, 0, ID) GRP1 , a.kw
From PROBE a inner join (Select if(Max(b.datum1) < Min(b.datum2), 0, 1) GRP, b.kw
From PROBE b
Group By kw) GrpHelper
on a.kw = GrpHelper.kw
Group By GRP1, a.kw
Hallo Minuert,
ein wenig Eigeninitiative bitte 😉
Du musst es natürlich auch über Reflection machen (wie in meinem obigen Beispiel von NotesUIWorkspace)
Hallo Minuert,
wie bereits oben erwähnt verwendest du die UI-Klassen (Frontend-Klassen) nur, wenn das Dokument direkt im Client bearbeitet werden soll. Sowas wie eine Fernsteuerung des Notes-Client. Wenn du einfach ein Dokument erstellen willst kannst du das auch einfach über die Backend-Klassen machen. Dann bekommt der User nichts davon mit. Allerdings musst du dann auch die Einladungen selber versenden usw..
So verbindest du dich über das Backend:
Erstelle Notes.NotesSession statt Notes.NotesUIWorkspace
NotesSession.GetDatabase öffnet die Datenbank
NotesDatabase.CreateDocument erstellt ein Dokument
Hier ist wieder zu beachten, dass NotesDatabas.CreateDocument ein Objekt der Klasse NotesDocument zurückgibt, wobei NotesUIWorkspace.ComposeDocument ein Objekt der Klasse NotesUIDocument zurückgibt.
was muss ich jetzt machen damit es bei diesem automatisch die richtigen Werte setzt (bez. wie/wo setze ich die parameter wie Zeit,Datum,Betreff)
Am besten ist, du erstellst einen Termin, genauso wie du ihn haben willst, und schaust dir in den Dokumenteigenschaften alle Feldwerte an.
Wie du Feldwerte setzt, hängt davon ab, ob du Frontend- oder Backend-Klassen verwendest.
Eine Beschreibung der Klassen findest du überall im Internet.
Hallo,
ich habe seit ca. 2 Wochen ein HTC Magic (original Vodafone ROM) und muss sagen, dass ich sehr zufrieden bin.
Im Gegensatz zum IPhone ist es ein wenig kleiner und schlanker. Man kann es wirklich super mit einer Hand bedienen.
Das Display ist vielleicht nicht ganz so gut, aber mit der etwas kleineren Bildschirmtastatur konnte ich mich nach ein paar Tagen ziemlich gut anfreunden.
Ein Entscheidungskriterium für mich war auch, dass man ziemlich unkompliziert eigene Applikationen entwickeln kann. Allerdings hat der Market bisher alle meine Wünsche erfüllt.
Der einzige negative Punkt, der mir aufgefallen ist: bei Verwendung von Wifi oder Internet hält der Akku nicht lange (bei mir max. 2 Tage), was für mich aber kein Problem ist.
Hallo Minuert,
wenn du es über Late Binding (COM) machst brauchst du keine Bibliotheken einbinden.
Nur der Notes-Client muss installiert sein.
object WS = Activator.CreateInstance(Type.GetTypeFromProgID("Notes.NotesUIWorkspace"));
object Doc = WS.GetType().InvokeMember("ComposeDocument", BindingFlags.IgnoreCase | BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, WS, new object[] { Server, Datenbank, "Appointment" });
// Felder setzen und speichern
if (Doc != null)
{
Marshal.ReleaseComObject(Doc);
}
if (WS != null)
{
Marshal.ReleaseComObject(WS);
}
Garby
Hallo Minuert,
Notes ist eine Dokumentenbasierte Datenbank.
Das kannst du dir so vorstellen, wie ein Verzeichnis, wo man beliebig viele Ini-Dateien reinspeichert.
Das heißt, dass ein Kalendereintrag gleich wie eine E-Mail erstellt wird.
Der Unterschied ist lediglich, dass sich Feldwerte unterscheiden.
Normalerweise reicht es das Feld "Form" auf die jeweilige Maske zu setzen.
Bei einem E-Mail wäre das dann "Memo", bei einem Termin "Appointment".
Am besten ist, du erstellst einen Termin, genauso wie du ihn haben willst, und schaust dir in den Dokumenteigenschaften alle Feldwerte an.
Wenn du den Termin direkt im Notes-Client erstellen willst, dann musst du die UI-Klassen verwenden.
Eine Beschreibung der Klassen findest du in der Notes-Entwicklerdokumentation.
Beispiel:
Wsp := CreateOleObject('Notes.NotesUIWorkspace');
Doc := Wsp.ComposeDocument(Server, Datenbank, 'Appointment');
Garby
Hi,
ich würde eine Schnittstelle IAbbildb definieren und den Parameter vom Typ IAbbildb deklarieren.
Garby
Hallo,
du musst den Parameter vom Typ der Schnittstelle definieren.
Garby
Hallo,
probier mal
Marshal.ReleaseComObject(notesSession);
Hallo,
wenn Dein Artikelobjekt die Schnittstelle ICustomTypeDescriptor implementiert, kannst du zusätzliche virtuelle Properties "vortäuschen".
Hallo serial,
wir haben sogar fast die gleiche Überschrift 😉
Link
Hallo kleines_eichhoernchen,
Control ctrl2 = Control.FromHandle(control.Handle)
gibt null zurück.
Werte ich contol.Handle im Debugger aus, steht folgender Wert im Überwachungsfenster:
Für die Instanz vom Typ "System.Windows.Forms.Control" können keine Felder abgerufen oder Methoden aufgerufen werden, da es sich um einen Proxy für ein Remoteobjekt handelt. Das ist eigenartig, weil SetParent ja funktioniert:
foreach (Control control in plugin.Controls)
{
SetParent(control.Handle, this.Handle);
}
[DllImport("User32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);
Naja, ich habe inzwischen das gefunden.
Auf AppDomains werde ich wohl verzichten müssen...
@Assri Komla
Was bitte soll ich jetzt aus deinem vielsagenden Post entnehmen?
Wie poste ich richtig? - welchen Punkt hab ich denn deiner Meinung nach nicht eingehalten.
Meine Frage lautet nicht "Wie kann ich meine Anwendung pluginfähig machen", sondern "Wie kann ich ein UserControl aus einem Plugin laden, das wiederum in einer eigener AppDomain geladen wird".
Dazu habe ich das Problem - wie ich finde - eindeutig beschrieben.
@JunkyXL
Funktioniert alles bestens bis auf das Hinzufügen.
Bei Conrols.Add wird die Exception "Das Feld "parent" kann nicht in Typ "System.Windows.Forms.Control" gefunden werden." geworfen
OK, vielleicht hätte ich Form.Controls.Add schreiben sollen.
Hat vielleicht jemand eine Idee?
Hallo,
wie der Titel schon sagt, möchte ich gerne ein Plugin in eine eigene AppDomain laden,
aus diesem Plugin dann ein UserControl erzeugen, und dieses dann im Hauptprogramm einer bestehenden Windows.Form hinzufügen.
Funktioniert alles bestens bis auf das Hinzufügen.
Bei Conrols.Add kommt wird die Exception "Das Feld "parent" kann nicht in Typ "System.Windows.Forms.Control" gefunden werden." geworfen;
Aus diesem Grund habe ich es mit SetParent probiert.
Das funktioniert dann auch, allerdings mit der unschönen Nebenwirkung, dass im UserControl nicht mehr mit TAB zwischen den Controls gewechselt werden kann.
Hat jemand eine andere Idee, wie ich das UserControl einem Formular zuordnen kann, oder vielleicht einen Workaround für das unschöne SetParent-Problem?
Danke im Voraus
ich hatte auch das gefühl dass Sie das extra gemacht haben, aus welchem grund auch immer...
Ja genau, die Deutschen wollen es halt ein wenig spannend machen 😉
Im Ernst, ich bin auch enttäuscht von der Leistung der Deutschen.
Gegen Polen haben sie für mich wie ein Turnierfavorit gespielt.
Nie und nimmer hab ich mir vorstellen können, dass sie gegen die Kroaten so schlecht aussehen würden.
Vor allem, wenn man gesehen hat, was die Kroaten gegen Österreich abgeliefert haben.
Jetzt bin ich aber mächtig gespannt auf Montag.
Ich hoffe auf ein super Spiel und möge der bessere (an diesem Tag) gewinnen 😉
Trotzdem würde mich interessieren, was die deutschen Fußball-Ikonen wie Breitner, Müller und auch die deutsche Fachpresse dazu sagen würden, wenn Österreich Deutschland aus dem Bewerb wirft.
Immerhin haben oben genannte sogar noch nach dem Österreich-Kroatien-Spiel den Österreichern die EM-Tauglichkeit abgesprochen...
Die haben uns an die Wand genagelt!
Hallo,
...hatte mal das gleiche Problem...
/// <summary>
/// Umschließt jedes Vorkommen von ReplaceText in Text mit dem HtmlTag
/// </summary>
/// <param name="Text">Der Text, in dem gesucht wird</param>
/// <param name="ReplaceText">Der zu umschließende Text</param>
/// <param name="HtmlTag">Der Tag. Hier bitte auf die spitzen Klammern verzichten</param>
/// <returns>Den Ergebnisstring</returns>
public static string ReplaceWithHtmlTag(string Text, string ReplaceText, string HtmlTag)
{
string RegExStr =
// Lookbehind
// Vor dem gesuchten Text darf sich kein <, aber beliebig viele nicht < oder > befinden
@"(?<!<[^<>]*)" +
// Lookbehind
// Am Anfang des Wortes, in dem der gesuchte Text enthalten ist,
// darf nicht unmittelbar ein & stehen.
// Dies zum Schutz von Sonderzeichen wie &nbpsp; oder ä.
@"(?<!&\w+)" +
// Backreference
// Gibt dem gesuchten Text den Namen txt, damit derselbe im String vorkommende Text verwendet werden
// kann, um diesen in Html-Tags einzuschließen.
@"(?<txt>{0})" +
// Lookahead
// Nach dem gesuchten Text darf sich kein >, aber beliebig viele nicht < oder > befinden.
@"(?![^<>]*>)";
string Result = Text;
if (!String.IsNullOrEmpty(Result))
Result = Regex.Replace(Result,
string.Format(RegExStr, ReplaceText),
"<" + HtmlTag + ">${txt}</" + HtmlTag + ">",
RegexOptions.IgnoreCase);
return Result;
}
Hallo,
so sollte es gehen:
int ID = (int)Command.ExecuteScalar("Insert Into Klienten(...) Values(...); Select LAST_INSERT_ID();");
...wird der Breakpoint erreicht, die gesamte Umgebung friert kurz ein (3-5 Sec) der Breakpunkt ist gelb (Ich kann aber die Schleife nicht mit F10 durch steppen.)
Genau so verhält es sich bei mir auch.
Ich probier es nächstes mal mit dem Ausgabefenster - mal sehen.
Walter
Das Aufteilen in mehrere Dlls hat den Vorteil, dass jedes Control eine eigene offizielle Versionsnummer hat, und man jedes Control separat updaten kann.
Hallo,
mit
Explorer /select,C:\Config.sys
dürfte es gehen.
Walter
Naja, ich weiß nicht....
So ziemlich alle User die ich kenne lesen aus Prinzip keine Readme-Dateien, bevor sie eine Software installieren.
Außerdem reagieren einige Kunden sehr gereizt auf Aussagen wie: "Das steht doch in der Readme".
Deine Vermutung, dass die Condition über .NET ausgewertet wird glaub ich nicht, weil dann müsste ja das MSI-Paket in .NET geschrieben sein.
Somit könnte man sich die Abfrage, ob das Framework installiert ist auch sparen, weil das MSI-Paket gar ausgeführt werden kann. 😉
Hat sonst einer vielleicht eine Idee?
Hallo,
ich möchte in einem Setupprojekt verhindern, dass die Applikation auf einem Betriebssystem < Win2k installiert wird.
Dafür verwende ich eine Startbedingung mit der Condition "VersionNT≥500".
Mein Problem ist, dass die Meldung, dass .Net installiert werden muss vorher kommt.
Mich würde das ziemlich ärgern, wenn ich als User erst das .NET-Framework downloaden und installieren müsste, und dann kommt die Meldung, dass die Applikation doch nicht zum Installieren geht.
Gibt es eine Möglichkeit die Reihenfolge der Startbedingungen zur verändern.
Oder geht es vielleicht auf eine andere Art?
Danke im Voraus
Walter
Da fallen mir spontan auch noch ein paar ein...*Philadelphia *The Machinist *Bube Dame König Gras *Snatch *Und täglich grüßt das Murmeltier *Braveheart *Besser gehts nicht *Wag the Dog *Grosse Pointe Blank *True Lies *Austin Powers *Batman Begins
Original von kleines_eichhoernchen
Ich kann jetzt leider nix zu Preisen oder speziellen Funktionen sagen, hab nur mal nen Video zu Sybase iAnywhere Advantage Datebase Server gesehen. Gibts als Server und auch als lokale Klient-Variante. Installation für lokal ist nicht nötig. 2 dlls ins Anwendungsverzeichnis und das soll reichen.vllt. noch nen
>
Der Advantage ist ganz gut, allerdings ist er auch ziemlich teuer.
Leider hat er 2 Schwächen(muss nicht unbeding von Belang sein):1.Kann kein Unicode
1.Bei der embedded-Version können nicht mehrere User auf 1 DB zugreifen.
TurboDB könnte was für dich sein.
Walter
Wenn du DataSet/DataTable verwendest, könntest du die Columns-Collection abfragen.
Hallo allerseits,
ich implementiere jetzt IXmlSerializable bei der Klasse PersonCollection.
Damit kann ich die Serialisierung von Hand ausprogrammieren.
Hier ist mein erster, soweit funktionierender Lösungsansatz.
Vielleicht fällt ja jemandem noch was besseres/einfacheres ein:
public interface IPerson
{
string Name
{
get;
set;
}
DateTime Geburtsdatum
{
get;
set;
}
}
[Serializable]
public class Person : IPerson
{
public Person()
{
}
public Person(string Name)
{
this.Name = Name;
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private DateTime geburtsdatum;
public DateTime Geburtsdatum
{
get { return geburtsdatum; }
set { geburtsdatum = value; }
}
}
[Serializable]
public class Angestellter : IPerson
{
public Angestellter()
{
}
public Angestellter(string Name, float Gehalt)
{
this.Name = Name;
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private DateTime geburtsdatum;
public DateTime Geburtsdatum
{
get { return geburtsdatum; }
set { geburtsdatum = value; }
}
private float gehalt;
public float Gehalt
{
get { return gehalt; }
set { gehalt = value; }
}
}
[Serializable]
public class PersonCollection : List<IPerson>, IXmlSerializable
{
public PersonCollection()
{
}
#region IXmlSerializable Member
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
XmlReader SubReader;
reader.ReadStartElement();
while (reader.IsStartElement())
{
SubReader = reader.ReadSubtree();
// Alles wird in ein XmlDocument gelesen, weil ich nicht weiß, wie ich den Cursor
// im XmlReader auf Position 1 zurückstellen kann.
XmlDocument Doc = new XmlDocument();
Doc.Load(SubReader);
string Klasse = Doc.ChildNodes[0].Name;
StringBuilder Bld = new StringBuilder();
XmlWriter Wr = XmlWriter.Create(Bld);
Doc.Save(Wr);
StringReader Sr = new StringReader(Bld.ToString());
// Neuen Reader erstellen.
SubReader = XmlReader.Create(Sr);
XmlSerializer Serial = new XmlSerializer(Type.GetType("ProbeApp." + Klasse));
this.Add((IPerson)Serial.Deserialize(SubReader));
reader.ReadEndElement();
}
}
public void WriteXml(System.Xml.XmlWriter writer)
{
foreach (IPerson Pers in this)
{
XmlSerializer Serial = new XmlSerializer(Pers.GetType());
StringWriter Wr = new StringWriter();
Serial.Serialize(Wr, Pers);
string PersTxt = Regex.Replace(Wr.ToString(), @"<\?xml version.*?>", "");
writer.WriteRaw(PersTxt);
}
}
#endregion
}
private void Serial()
{
PersonCollection Personen = new PersonCollection();
Personen.Add(new Person("Name1"));
Personen.Add(new Angestellter("Ang1", 100));
Personen.Add(new Person("Name2"));
Personen.Add(new Angestellter("Ang2", 200));
using (FileStream Str = new FileStream("C:\\Personen.xml", FileMode.Create))
{
XmlSerializer Ser = new XmlSerializer(typeof(PersonCollection));
Ser.Serialize(Str, Personen);
Str.Close();
}
}
private void DeSerial()
{
PersonCollection Personen;
using (FileStream Str = new FileStream("C:\\Personen.xml", FileMode.Open, FileAccess.Read))
{
XmlSerializer Ser = new XmlSerializer(typeof(PersonCollection));
Personen = (PersonCollection)Ser.Deserialize(Str);
Str.Close();
foreach (IPerson Pers in Personen)
{
textBox2.Text += Pers.Name;
if (Pers is Angestellter)
{
textBox2.Text += ";" + ((Angestellter)Pers).Gehalt.ToString();
}
textBox2.Text += Environment.NewLine;
}
}
}
Hallo 0815Coder,
das Funktioniert leider nicht, bekomme immer noch die gleiche Meldung 🙁
Hallo,
ich möchte gerne eine generische Liste eines Interfaces serialisieren.
Hier ein Beispiel:
public interface IPerson
{
string Name
{
get;
set;
}
}
[Serializable]
public class Person : IPerson
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
[Serializable]
public class PersonCollection : List<IPerson>
{
public PersonCollection()
{
}
}
...
private void button1_Click(object sender, EventArgs e)
{
PersonCollection Personen = new PersonCollection();
Personen.Add(new Person());
Personen.Add(new Person());
using (FileStream Str = new FileStream("C:\\Personen.xml", FileMode.Create))
{
XmlSerializer Ser = new XmlSerializer(typeof(PersonCollection));
Ser.Serialize(Str, Personen);
Str.Close();
}
}
Ich bekomme immer den Fehler:
Die Schnittstelle ProbeApp.IPerson kann nicht serialisiert werden.
Ich habe auch schon probiert ISerializable zu implementieren, führt aber zum gleichen Ergebnis.
Hat jemand eine Idee?
Danke
Walter
Hallo,
hast du damit Erfolg gehabt?
Findet man dazu vielleicht irgendwo ein Beispiel?
Danke
Walter
Original von oli001
Sortieren klappt ja (naja aber halt wie....) 1,10,2,20,21,22,3,4,5,6,7...... des kann ja net wahr sein oder??
Das liegt wahrscheinlich daran, dass deine Sortierspalte nicht numerisch ist, oder?
Einen Teil deiner Anforderungen würde doch auch eine normale Chart-Library abdecken.
z.B.: Zedgraph.
Hallo,
weiß jemand, wie ich den in Windows registrierten Firmennamen herausfinden kann?
Danke
Walter