Laden...

Forenbeiträge von MillionsterNutzer Ingesamt 235 Beiträge

06.05.2008 - 13:07 Uhr

Wow, danke mal soweit. Werde mich jetzt erst mal ums ausprobieren kümmern müssen!

Hat jemand von Euch noch ein einfaches Beispiel zum "konsumieren" eines Webservices? Muss erst mal schauen wie sowas geht...

Grüße

05.05.2008 - 18:06 Uhr

Hi regen!

Irgendwie habe ich mit dieser Antwort schon gerechnet... 😦

Habe auch das gefühl, dass das ganze entweder teuer oder nicht ganz legal werden wird 😕

Grüße

05.05.2008 - 18:04 Uhr

Hi JAck30lena!

Leider hast du mich da falsch verstanden: da gibt es momentan noch keine "die", die etwas zur Verfügung stellen. Das Projekt ist quasi für privat und ich hab eben noch keinen Anhaltspunkt wie ich die Sache angehen könnte.
Klar gibt es zig Webseiten die Börsenkurse gratis zur Verfügung stellen, allerdings wäre das wirklich nur Plan-B eine Webseite zu zerlegen. Webservices konnte ich hierzu nicht finden, muss aber zugeben, dass ich auch noch nie einen Webservice verwendet habe und mich damit noch nicht auskenne...

Wie immer wäre es mir am liebsten, wenn es so eine Service for free geben würde.

Grüße

05.05.2008 - 17:44 Uhr

Hi!

Ich möchte für eine kleine Standard-.Net-Anwendung aktuelle Börsenkurse anhand der WKN online ermitteln können und wollte mal fragen ob jemand von euch schon mal ein ähnliches Problem hatte.
Ich habe schon mal danach gegoogelt, allerdings gibt es entweder nix für .net oder aber es werden irgendwelche Webseiten zerlegt um an den gewünschten Kurs zu kommen. Daher möchte ich zuerst fragen, ob da jemand eine etwas sauberere Variante kennt.

Viele Grüße

PS: Ich weiß nicht ob das Thema hier so super passt, allerdings scheinen die anderen Foren noch weniger geeignet - Sorry 😕

11.10.2007 - 15:16 Uhr

Hi!

Ich nutze den Propertygrid um diverse Werte von meinen Objekten anzuzeigen. Um besonders kritische Werte einer Eigenschaft zu visualisieren habe ich den UITypeEditor sowie PaintValue überschrieben und versehe diese Eigenschaften mit einem Icon. Das funktioniert soweit, leider bekommen die Icons, die ich zeichne alle einen schwarzen Rand, der automatisch (vom PropertyGrid?) gezeichnet wird.

Hier meine überschriebene PaintValue zum besseren Verständnis:



public override void PaintValue(PaintValueEventArgs e)

{  
   //Draw the corresponding image
   Bitmap newImage;


   if (Globals.DeviceInfos.Seal == true)
      newImage = new Bitmap(Image.FromFile(@"c:\temp\locked.bmp"));
   else
      newImage = new Bitmap(Image.FromFile(@"c:\temp\unlocked.bmp"));
   Rectangle destRect = e.Bounds;
 
  //Draw Image
   e.Graphics.DrawImage(newImage, destRect);

 }


Wer kennt eine Möglichkeit diesen, diesen Rand zu entfernen?

Vielen Dank im Voraus! Grüße!!!

04.09.2007 - 21:57 Uhr

Hi Hug'

Das Thema hat sich bereits erledigt...

Ich hab mir die ExplorerBar von Tom Guinther geschnappt (http://www.codeproject.com/cs/miscctrl/TgXPPanel.asp) und für meine Bedürfnisse angepasst. Es ist zwar sicherlich nicht die Beste, aber die beste freie Explorerbar, die auch für kommerzielle Zwecke genutzt werden darf...

Grüße!!!

17.08.2007 - 11:50 Uhr

Hi Herbivore / Hi Ronny!

Leider wird es auf eine zusätzliche PictureBox rauslaufen müssen, da bei irgendwelchen Behelfslösungen nie wirklich sichergestellt ist das nicht doch Text und Bild sich verdecken...

Naja, trotzdem Danke!!!!

17.08.2007 - 10:04 Uhr

Hi!

Ich würde gerne die Image-Funktion von dem standard Label-Steuerelement nutzen. Dabei ist mir aufgefallen, dass wenn sowohl Bild als auch Text definiert sind, der Text zunächst über dem Bild ist.
Ich konnte leider keine Eigenschaft finden mit der ich das Bild z.B. links vom Text darstellen kann.
Gibt es da eine einfache Lösung oder eine Eigenschaft die ich übersehen habe. Oder muss ich die Bilder extra in einer PictureBox oder etwas ähnlichem daneben unterbringen?

Grüße!!!

10.08.2007 - 14:32 Uhr

Hi falangkinjau!

Also das passt doch nicht so recht! Von der optik her ist das was ganz anderes!

@ northside: Ich hab mal mit Expander gesucht, allerdings nicht passendes gefunden...
Kennst du etwas in die Richtung oder war das mit "Expander" nur so ein Gefühl von dir?

Grüße!!!

10.08.2007 - 14:19 Uhr

Hi falangkinjau!

Da hast du aber mal Recht! Habe mich durch das 'Outlook'-Zeug blenden lassen. Hab nur das erste Bild gesehen und gedacht ... das ist es nicht...

Danke für den Hinweis - werde das mal checken...

Grüße!!!

10.08.2007 - 14:00 Uhr

Hi!

Wahrscheinlich hat jetzt keiner auch nur annähernd ne Ahnung was ich mit XP-Aufgabenmenü meine, daher bitte den angehängten Screenshot zu rate ziehen 🙂

Ich würde das Menü, das z.B. im Arbeitsplatzordner an der linken Seite des Fensters angedockt ist auch in einer meiner Anwendungen haben. Weiß jemand, ob es sowas als Steuerelement irgendwo zu haben gibt (am besten OpenSource)?

Bei CodeProject habe ich nichts passendes gefunden und Google macht keinen Sinn, wenn man nicht weiß wie es richtig heißt, dabei fällt mir ein: Wie heißt das Menü eigentlich richtig?

Hat da jemand von Euch nen Tip?

Grüße!!!

04.06.2007 - 14:31 Uhr

Hi talla, hi VizOne!

Wollte mich nur nochmal für eure Tips bedanken!

Werde mein Problem jetzt mit dem statischen Konstruktor lösen und dafür das Laden von externen Definitionen wegfallen lassen, so dass die ganze Sache auch wieder ein korrektes Anrecht auf ein statisches Dasein hat - hätte ich es beibehalten hätte ich VizOne wirklich zustimmen müssen.

DANKE!!!

01.06.2007 - 13:02 Uhr

Hi talla!

Danke für deinen Tip mit den statischen Konstruktoren, habe ich vorher nicht gekannt. Habe es natürlich gleich ausprobiert und siehe da, es scheint mir tatsächlich die elegantere Variante zu sein. Allerdings bin ich immer noch etwas beunruhigt:
Ich habe zwei Methoden in meiner Klasse für das Laden der Definitionen:

LoadInternalDefinitions()
und
LoadExternalDefinitions(string filePath)

Die erstere wird per default, also auch in dem statischen Konstruktor geladen, hier kann ja nix schief gehen. Aber angenommen, einer der Kollegen braucht besondere Definitionen und nutzt hierzu die nun statische Methode LoadExternalDefinitions: Das habe ich ausprobiert und tatsächlich werden die externen Definitionen auch für spätere Aufrufe der anderen Operationen beibehalten. Aber wie lange? Wie kann ich sicherstellen dass das so bleibt so lange es sein muss?
Ich denke für diesen Fall müsste ich (und das würde auch die vorige Singleton-Variante betreffen) müsste ich einen normalen Konstruktor beibehalten, oder?

Grüße!!!

01.06.2007 - 10:24 Uhr

Hi!

Ich denke es dürfte nicht schaden, wenn ich euch die Problematik die meiner Frage zugrunde liegt zunächst einmal etwas ausführlicher beschreibe. Nur vorne weg, es handelt sich hier weniger um ein Problem als vielmehr um eine Designfrage:

Meine Aufgabe ist es eine bereits vorhandene Dll zu ersetzen mit der man bisher Operationen auf bestimmte physikalische Einheiten ausführen konnte. Ein wichtiger Apekt der neuen Bibliothek ist, dass diese sich nicht nur bestimmte Einheiten beschränken soll, sondern erweiterbar sein soll. Das führt dazu, das die Einheitsdefinitionen, Umrechnungsfaktoren, etc. nicht mehr hart codiert werden können sondern aus einem XML-File ausgelesen werden können. Klar gibt es auch hier ein Standard XML-file, dass ich als eingebettete Resource im Projekt mit eingebunden habe, aber theoretisch könnte es den Fall geben das die zukünftige Dll für Sonderfälle auf eine extra XML-Datei zugreifen müsste.

Diese Sachlage hat also dazu geführt, dass ich bei meiner neuen Dll nicht mal einfach nur so mit statischen Methoden arbeiten kann, da ich für meine Operationen zunächst einmal die Definitionen einlesen muss. Damit das jedoch nicht für jede Operation aufs neue geschieht nutze ich eine Instanz die ggf. schon im Konstruktor einmalig ihre XML-Datei einliest und dann die einzelnen Operationen nach außen hin öffentlich zur Verfügung stellt. - Eigentlich wäre hier schon eine akzeptable Lösung vorhanden, aber ich habe die Sache noch etwas weiter gesponnen:

Zunächst habe ich das Singlton-Pattern auf meine Klasse angewandt, so dass nun immer nur eine Instanz meiner Klasse exisitiert und damit mehrfach-Instanzierungen und damit ein erneutes Einlesen der Definitionen verhindert wird.
Dabei kam ich auf die Idee, dass ich nun doch statische Methoden in meiner Dll definieren könnte, die beim Aufruf über das Singleton sich einfach nur die aktuelle Instanz holen und die übergebenen Parameter an die normalen Methoden weitergeben. Das hätte den Vorteil das die "Anwender" der Dll sich wie gewohnt der statischen Methoden bedinenen könnten (zumindest wenn die Standarddefinitionen ausreichen).

Tatsächlich scheint dieser Ansatz auch zu funktionieren: Selbst wenn ich unterschiedliche der neuen, statischen Methoden mehrfach aufrufe, so wird nun immer die selbe Instanz verwendet, so dass also eigentlich alles traumhaft funktioniert. Aber nun zu meinen Fragen:

  1. Ist dieser Ansatz so überhaupt in Ordnung? Ich habe soetwas noch nie verwendet und bin mir nun nicht sicher ob solch ein "Design" überhaupt "korrekt" ist oder ob es vielleicht irgendwelche unerwünschte Nebeneffekt birgt (Was "saubere" Programmierung angeht bin ich leider ein Anfänger).

  2. Warum und wie lange bleibt denn die Instanz meiner Dll lebendig? Immerhin wird sie ja nicht "von außen" lebendig gehalten. Der Garbagecollector weiß doch eigentlich nie, ob die Instanz noch gebraucht wird oder nicht...

  3. Seit ich das Singleton implementiert habe bekomme ich folgende Kompiler-Warnung: "xyz.dll enthält keine Typen, die für COM interop registriert werden können." (Ja, die Dll sollte später dann auch COM-fähig sein). Leider kann ich mit dieser Meldung nicht wirklich etwas anfangen. Versteht von euch jemand was dies e Meldung zu bedeuten hat?

Grüße!!!

20.04.2007 - 18:15 Uhr

Danke für den Tip herbivore!!

Grüße!

20.04.2007 - 13:56 Uhr

Hi!

Möchte im Treeview bei einem Doppelklick einen Dialog mit Detailinfos zum geklickten Knoten anzeigen lassen. Das geht auch so weit, allerdings finde ich es sehr unschön, dass durch den Doppelklick dann auch zusätzlich noch der Knoten auf- bzw. zugeklappt wird (expand/collapse). Wie kann ich dieses Verhalten ändern?

Konnte leider keine passende Property oder ähnliches finden um dem Problem bei zu kommen.

Hat da jemand nen Tip für mich?

Grüße!!!

01.06.2006 - 11:04 Uhr

Hi Xqgene,

hast mich erwischt 😉 tatsächlich kann ich so wohl, wenigstens vorerst vernünftig arbeiten, obgleich ich die Lösung jetzt nicht gerade als elegant empfinde

Danke!

01.06.2006 - 10:04 Uhr

moin blackcoin,

also es gibt einen Eintrag "Elemente auswählen" der einen Dialog anzeigt, in welchem ich dann unter ALLEN Steuerelementen auswählen kann welche ich den angezeigt haben möchte und welche nicht.
Problem:
Lassen ich die Option AutoToolboxPopulate auf true, dann werden diese Einstellungen beim nächsten AutoPopulate wieder über den haufen geworfen, d.h. ich hab wieder alle Steuerelemente in der Toolbox.
Lasse ich die Option hingegen auf false, so Erscheinen die Steuerelemente meiner Assembly erst gar nicht in der Auswahl -> ich kann sie also gar nicht erst anzeigen lassen.

Ansonsten habe ich kein Ähnliche Funktion über das KontextMenu der ToolBox

Grüße

01.06.2006 - 08:38 Uhr

Hi,

habe in meinem Projekt jede Menge eigener UserControls, von denen ich einige wenige gerne auch über die ToolBox gerne direkt zur Weiterverwendung hätte.

Mit der Einstellung (Extras>Optionen>Windows Form-Designer) "AutoToolboxPopulate = true" kann ich mir alle meiner eigenen UserControls in die Toolbox automatisiert einbinden lassen. Allerdings ist diese Methode beim neu Erstellen des Projekts recht langsam und ausserdem sind die Steuerelemete dann recht unübersichtlich in einem großen Ordner, von dem ich 80% nie brauchen werde.

Der Versuch die nützlichen Controls mit einem Attribut wie oder Ähnliche beim Autopopulate wenigstens von den anderen Controls zu trennen und in eine eigene Kategorie innerhalb der Toolbox zu verschieben scheint ohne Erfolg...

Habe auch schon versucht ein UserControl per Drag&Drop aus dem SolutionsExplorer in die ToolBox zu ziehen. In diesem Fall legt er jedoch kein vernünftiges ToolBoxItem an, sondern lediglich einen Verweis auf den Pfad der Klasse auf meiner Platte (total sinnlos!). Dachte eigentlich das dies bei VisualStudio2003 möglich war, in der 05er Version habe ich aber so keinen Erfolg.

Ich hoffe jemand von Euch kennt sich da besser mit dem Umgang mit benutzerdefinierten Steuerelementen aus und kann mir ein paar Tips zu dem Thema geben zu können.

Grüße

07.03.2006 - 20:23 Uhr

Hi herbivore,

bin inzwischen selber drauf gekommen - es ist halt schon spät, da kanns schon mal vorkommen das ich so nen Quatsch poste...

Sorry und trotzdem danke für schnelle Antwort!

Grüße

07.03.2006 - 19:56 Uhr

Hi,

die oben genannte Fehlermeldung bekomme ich, in einer meiner Klassen, wenn ich Application.StartUpPath nutzen möchte. Ich denk das liegt daran, dass ich auch Word eingebunden habe und dort Application mit einer anderen verwendung vorkommt.

Aber was kann ich gegen diesen Fehler machen?

Grüße

07.03.2006 - 09:59 Uhr

Hi MartinE,

das wäre natürlich die sauberste Lösung gewesen! Danke!

Allerdings werd ich meinen Cod jetzt nicht mehr umschreiben...

Drei Lösungswege für das gleiche Problem - das hätte ich nicht erwartet.

Ich hoffe dieser Thread bleibt der Welt noch eine Zeit lang erhalten, denn ich denke dieses Problem weren noch einige andere haben...

Grüße

06.03.2006 - 17:22 Uhr

Hi trinkjoghurt,

dein Vorschlag geht doch, allerdings werde ich an meiner "neu entdeckten" Methode festhalten, da ich nicht weiß wie ich ohne große Umstände z.B. die fünfte Spalte als "E1" errechnen kann, oder die dritte als "C1"...

Wenn du hierfür aber eine Lösung hast wäre ich dir dankbar...

06.03.2006 - 17:18 Uhr

hi trinkjoghurt,

zwar wirft dein Vorschlag keinen Fehler aus, allerings sehe ich auch kein Ergebnis. Für welche Spalte soll "A1" stehen? Für die erste Spalte? Wäre B1 dann die zweite?

aber ich habe gerade eben noch eine Alternative gefunden. Ich muß einfach nur eine Zelle als Range in der gewünschten Spalte markieren:

rng = (Excel.Range)ws.cells[1, 1];

und anschließend kann ich mit:

rng.EntrieColumn.xyz...;

darauf zugreifen.

Ich denke man kann die Sache als gelöst ansehen....

Danke

Grüße

06.03.2006 - 12:02 Uhr

Hi,

ich muß mit meinem Progrämmchen auch Excel-files generieren, dabei kam jetzt das Request hinzu die generierten Tabellen auch gleich zu formatieren, damit das ganze etwas ansprechender und übersichtlicher aussieht.

Angefangen habe ich damit zum Beipiel die erste Zeile mit den Überschriften zu formatieren. Z.B. so:


Excel.Range rng = (Excel.Range)ws.Rows[ZeilenNummer, Type.Missing]; 
rng.WrapText = true;
rng.RowHeight = 80;

Klappt soweit auch ganz gut. Jetzt geht es an die Spalten und da liegt das Problem. Eigentlich sollte man erwarten das man eine Spalte so auswählt:

Excel.Range rng = (Excel.Range)ws.Columns[Type.Missing, SpaltenNummer];

Fehlanzeige! Diese Codezeile gibt mir eine nichtssagende Fehlermeldung aus und ich kann mir keinen anderen Weg vorstellen eine Spalte sonst auszuwählen.

Kennt sich da jemand von euch aus und kann mir einen Tip geben?

Grüße

01.03.2006 - 11:04 Uhr

Hi @ all,

also zunächstmal muß ich DaSchroeter zustimmen: .BringToFront() ändert leider nichts an den Tatsachen, daher habe ich die Idee die mit der PictureBox verworfen.

Statt dessen habe ich beschlossen die BackGroundImage-Eigenschaft zu nutzen:

Image img = Image.FromFile(@"c:\abc.png");
this.BackgroundImage = new Bitmap (img,this.Width,this.Height)

Damit kann ich auch dem gekachelten Hintergrund entgegenwirken. Zwar ist die Lösung nicht wirklich sauber, da die Bilder immer in der Größe angepasst werden. Wenn ich mich aber einschränke und immer nur Wallpapers in höheren Auslösungen nehme kann man darüber hinweg sehen.

Wenn man das vermeiden möchte, um zum Beispiel kleinere Bilder unangepasst und zentriert anzuzeigen, könnte man evtl. das Bild mit einem Graphics-Object entsprechend mit einem Rahmen versehen. Glaube ich zumindest 🙂

Ah, so wie ich sehe hat Programmierhans hierzu den nötigen Code geliefert. Stimmts???

Grüße

28.02.2006 - 07:50 Uhr

Hi,

habe ein Hauptformular von dem aus Kindformulare zum arbeiten geöffnet werden. Wollte jetzt eigentlich ein Hintergrundbild in das Hauptformular einbringen, allerdings wird das Bild gekachelt wenn ich es direkt als Hintergrundbild zuordne. Deshalb habe ich jetzt eine Picturebox auf das Hauptformular gesetzt.
Das Bild wird jetzt einwandfrei angezeigt, allerdings mußte ich feststellen, das die geöffneten Kindformulare von der Picturebox verdeckt werden. Wie geht denn sowas? Was mach ich da falsch?

Grüße

26.02.2006 - 20:32 Uhr

Hi,

habe in einem Datagrid auch Spalten, die ich mit Expressions berechnen lasse. Das klappt auch so weit, allerdings werden die Berechnungnen nur dann ausgeführt, wenn der User in die nächste Zeile rückt.

  1. Gibt es eine Möglichkeit die Felder schon berechnen zu lassen während man die anderen Werte in der Zeile bearbeitet? Also zum Beispiel Berechnen einer Summe schon während man die Summanten ändert?

  2. Gibt es eine Möglichkeit die Felder schon von vorne herein berechnen zu lassen, obwohl der Nutzer noch gar nicht in dieser Zeile war. Zum Beispiel sind meine Summantenspalten schon von vorne herein mit Zahlen gefüllt, dass zu berechnende Summenfeld bleibt allerdings so lange leer bis ich in die Zeile springe.

Grüße

PS: In der Hoffnung das dieser Post nicht eher in das Forms-Forum gehört...

25.02.2006 - 17:29 Uhr

Hi Programmierhans!

Klappt aufs erste. Danke für den Tipp!

Grüße

24.02.2006 - 19:34 Uhr

Hi,

möchte für eine DataColumn eine etwas ausgefallene Expression festlegen, wofür ich eine IF-Anweisung benötige leider komme ich selber nicht drauf was daran falsch ist:

DataColumn.Expression = "IF Boolwert=True a*b ELSE 0";

Ich muß selber zugeben das es seltsam aussieht aber eigentlich müßte es stimmen: Wenn der Wert einer anderen Spalte auf "True" steht soll sich der Wert der Column aus a*b errechnen ansonsten soll der Wert einfach 0 sein.

Kann mir da einer kurz mit der Syntax helfen?

Grüße

23.02.2006 - 16:59 Uhr

Hi EvilTK,

hab es nach einer halben Ewigkeit rumfrickeln hinbekommen... über 10 Umwege die du gar nicht wissen willst und mir dann wahrscheinlich eh peinlich wären!

Naja, wenn es einfach wäre, wäre es ja auch langweilig 🙂

Danke für die Hilfe

Grüße

23.02.2006 - 15:47 Uhr

Leider muß ich dichnochmals um Hilfe angraben:
Leider weiß ich nicht wie und wo ich den DataAdapter-Wizard finden soll, ich habe diesen auch noch nie benutzt - kann ich den also überhaupt auf den DataAdapter in meinem Code anwenden?

Ich habe auch ein englische Visual Studio (2003).

Ich denke die Parallelitätsverletzung kommt daher, dass ich zwei Adapter habe (du erinnerst dich evtl. an den anderen Thread von mir gestern 🙂 ) einen für das SELECT und einen fürs Update....

Grüße

23.02.2006 - 14:14 Uhr

Hi EvilTK,

Gehen wir von einem SELECT wie diesem aus:

"SELECT a,b,c FROM Beispiel"

Dieser SELECT wird von mir in DS.Tables[0] übertragen. Anschließend setze ich das folgende:

DS.Tables[0].Columns["c"].Expression = "a*b";
this.DataGrid.DataSource = DS.Tables[0];

Soweit alles in Ordnung. Erst beim:

DataAdapter.Update(DS.Tables[0]);

tritt der Fehler auf...

Ich hoffe das reicht um den Fall näher zu beleuchten, aber ich mach mir nicht viel Hoffnungen 😕

Dachte zunächst man könnte die Expression vor dem Updaten wieder auf null setzen, aber auch hier tritt ein Error auf:

Parallelitätsverletzung: Der UpdateCommand hat sich auf 0 Datensätze ausgewirkt...

Naja...

23.02.2006 - 12:54 Uhr

Hi,

habe in meinem Datagrid eine Spalte aus einer Table der ich eine Expression zuweise. Das klappt auch soweit, d.h. die Spalte wird trotzdem mit den ursprünglichen Werten aus der Table gefüttert und wenn ich Daten ändere findet trotzdem die Berechnung statt. Wenn ich nun aber über meinen CommandBuilder speichern möchte bekomme ich die Meldung:

Die Spaltenzuordnung von SourceColumn 'BerechneteSpalte' ist fehlgeschlagen, da die DataColumn 'BerechneteSpalte' eine berechnete Spalte ist.

Klingt logisch, aber wie kann ich diese Problematik umgehen. Ich möchte das die neu errechneten Werte auch in die Table zurückgeschrieben werden.

Grüße

22.02.2006 - 18:03 Uhr

Es ist mit zwar unbegreiflich, aber jetzt funktioniert es...

Danke für Geduld, Verständnis und natürlich die Lösung - allein wär ich nie auf die Idee gekommen.

Da merkt man halt das Wirtschaftsinformatiker in der Regel nur halbe Informatiker sind... 🙂

Danke nochmal!!!

22.02.2006 - 17:53 Uhr

sieht schon mal gut aus - scheint zu funktionieren - laßt mich das noch kurz ausgiebig testen...

22.02.2006 - 17:29 Uhr

Hi Programmierhans & EvilTK,

ich denke wir gehen von unterschiedlichen Ansätzen aus, da ich kein Profi bin programmiere ich auch etwas "unkonventionell" 😕

Wahrscheinlich hätte sich das alles vermeiden lassen, wenn ich von Anfang an meinen kompletten code gepostet hätte - Sorry! Erst mal der Code der mein DataGrid befüllt:


//DataAdapter DA einrichten
DA = new OleDbDataAdapter("SELECT * FROM Mitarbeiter INNER JOIN GJahre ON Mitarbeiter.ID=GJahre.ID","...Zugangsstring zur mdb-Datenbank...");
//Füllen des DataSet DS
DA.Fill(DS);
//Füllen des DataGrid DG
DG.DataSource = DS.Tables[0];

Tja, ich denk das habt ihr euch wohl schon mal ganz anders vorgestellt, stimmts? Und jetzt noch der Code mit dem ich die Daten im DataGrid in die Datenbank zurückspeichere:


OleDbCommandBuilder CB = new OleDbCommandBuilder(DA);
DA.Update(DS.Tables[0]);
DS.AcceptChanges();

Läßt sich euer Lösungsvorschlag in diesen Zeilen auch unterbringen?

Grüße

PS: Bitte nicht den Kopf schütteln wenn ihr meinen Code gesehen habt 🙂

22.02.2006 - 14:30 Uhr

Tut mir leid Programmierhans, aber ich deine Antwort jetzt gerade nicht so richtig auf meine Fragen zuordnen 😕

vor allem wäre mir diese Frage wichtig:

"Nimm für deinen Update einen eigenen Adapter"
Wie geht das? Klar ich könnte einfach einen neuen Adapter machen der nur die Daten von GJahre enthält, aber wie bekomme ich die Änderungen von dem Datagrid dann in diesen Adapter? Könntest du mir die Sache etwas genauer schildern?

22.02.2006 - 13:46 Uhr

Hi Programmerhans,

leider bin ich Anfänger und bin da gerade nicht so mitgekommen:

"Nimm für deinen Update einen eigenen Adapter"
Wie geht das? Klar ich könnte einfach einen neuen Adapter machen der nur die Daten von GJahre enthält, aber wie bekomme ich die Änderungen von dem Datagrid dann in diesen Adapter? Könntest du mir die Sache etwas genauer schildern?

Mit einem Select "Select * From Mitarbeiter"
Ich wollte eigentlich nur Daten in GJahre verändern, oder hast du absichtlich einen SELECT auf Mitarbeiter vorgeschlagen?

Grüße

22.02.2006 - 11:53 Uhr

Hi,

habe ein DataGrid das mit einem DataAdapter mit einem SQL-Statement wie dem folgenden gefüttert wird:

"SELECT * FROM Mitarbeiter INNER JOIN GJahre ON Mitarbeiter.ID=GJahre.ID";

Das klappt soweit auch, nur wenn ich nun Änderungen in dem DataGrid speichern will bekomme ich folgende Fehlermeldung:

"Dynamische SQL-Generierung wird gegen mehrere Basistabellen nicht unterstützt."

Was kann ich da machen? Von der genannten Tabelle Mitarbeiter brauche ich lediglich den Namen des jeweiligen Mitarbeiters damit ich die Daten aus der Tabelle GJahre (Geschäftsjahre) auch einer Person zuordnen kann und nicht nur die Mitarbeiternummer sehe.

Was kann ich da machen?

Grüße

21.02.2006 - 14:24 Uhr

Hi Programmierhans,

endlich funktioniert es annähernd, jetzt muß ich nur noch das image so resizen, das es auf DinA4 passt un gut ist.

Man ist das ganze Grafik- und Druck-Zeug kompliziert. Echt nicht meine Welt...

Grüße

21.02.2006 - 12:35 Uhr

Hi Programmierhans!

Ich hoffe du hast meine beiden Events mit Code gesehen, da ich beim einstellen meiner Antwort zuerst keinen Code darin hatte (evtl. jetzt nochmal angucken).

Zu: Hast Du den printDocument1_PrintPage angehängt ?
=> Bin mir jetzt nicht sicher was du meinst, aber beide der gezeigten Events werden ausgeführt. Daruter eben auch der printDocument1_PrintPage-Event

Zu: Was sollte Deiner Ansicht nach gedruckt werden wenn Du ein leeres Image druckst ?
Warum soll ich ein leeres Image Drucken? Ich bearbeite doch das e.Graphics aus dem printDocument1_PrintPage-Event indem ich einen ein Bitmap aus dem Handle auf mein Formular generiere und dieses wiederrum in das e.Graphics schreibe. Oder seh ich das falsch?
Sorry, bin Anfänger...

Grüße

21.02.2006 - 11:21 Uhr

Hallo Programmierhans,

tja, ich hab mir deinen Link mal angesehen und mal ein wenig weitergebastelt, aber mit der Lösung die ich nutze bekomme ich nur ein leeres Bild! Wäre nett wenn du meinen code mal ansiehst:
Grundlage ist ein einfaches From mit einem Drucken-Button, einem PrintDialog-Element und einem Print-PageElement. Bei drücken des Buttons wird folgender Event ausgelöst:

private void btn_Click(object sender, System.EventArgs e)
{
this.printDialog1.Document = this.printDocument1;
if (this.printDialog1.ShowDialog() == DialogResult.OK)
   printDocument1.Print();
}

Zusätzlich kommt noch der folgende Event hinzu der eigentlich den Screenshot erledigen sollte:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics g = Graphics.FromHwnd(this.Handle);
Rectangle cr = this.ClientRectangle;
Image img = new Bitmap(cr.Width,cr.Height,g);
e.Graphics.DrawImage(img, cr.Width, cr.Height, img.Width, img.Height);
}

Wie schon gesagt bekomme ich nur eine leere Seite. Was mach ich denn falsch?

Grüße

20.02.2006 - 17:34 Uhr

Wow,

von wegen "einfach mal nen Screenshot machen"! Ich muß mir das alles erst nochmal genauer ansehen...

Komm gerade einfach nicht auf anhieb darauf wie das funktionieren soll.

Grüße

20.02.2006 - 16:38 Uhr

Hi Vertexwahn,

Geht mir wie LastGentleman:

mit WinAPI.GetDesktopWindow() kann ich leider nix anfangen - Sorry bin Anfänger...

Grüße

20.02.2006 - 15:56 Uhr

Hi,

ich sollte einige Daten aus einem Formular heraus drucken können. Um dies möglichst einfach zu erledigen dachte ich mir ich könnte einfach ein Screenshot von dem Form machen und diesen dann drucken.
Wie ich eine einfache Bilddatei an den Drucker schicke weiß ich von einem anderen Problem, jetzt sollte ich nur noch wissen wie ich einen Screenshot von einem Formular mache und diesen dann als image in den Code bekomme.

Kann mir da jemand kurz auf die sprünge helfen...

Grüße

01.11.2005 - 14:04 Uhr

Nochmal den falschen Link genommen - nochmal ein neuer Thread...

Ich gebs auf - heut ist nicht mein Tag...

Falls irgendein Admin das sieht: Bitte diesen Thread löschen!

01.11.2005 - 14:02 Uhr

Mensch das hab ich voll vergessen, du hast recht (Sorry, bin halt noch ein Anfänger!)

Will es eben mal ausprobieren...

Grüsse

PS: Hmm, schlecht zwei Threads für ein Thema...