Laden...

Forenbeiträge von SvenC Ingesamt 29 Beiträge

23.07.2010 - 09:15 Uhr

Nein der Weg über Copy+PasteSpecial hat leider nichts gebracht - Seitenumbrüche und Seitenformate sind wieder hinüber (oder muss man einen der PasteSpecial-Paramter auf einen bestimmten Wert setzen?).

Oder hat jemand noch eine andere Idee?

22.07.2010 - 14:27 Uhr

Hallo,

ich erstelle mir per C# mehrere Word(2000)-Dateien und möchte diese nun zusammenfügen.
Per InsertFile werden die Dateien zwar aneinander gehängt, das Seitenformat der einzelnen Seiten geht aber verloren (innerhalb der Einzeldateien gibt es Hoch- und Querformat-Seiten, nach dem Zusammenfügen ist das erste Dokument weiterhin OK, bei den folgenden sind aber alle Seiten so wie die letzte Seite des ersten Dokumentes)

Gibt es einen Weg, um die Dateiformatierungen so zu behalten wie sie sind?

Danke
SvenC

22.10.2009 - 13:49 Uhr

Hallo,

ich bin gerade dabei, Word(2000)-Dokumente über eine WinForm-Anwendung zu erstellen/bearbeiten.
Das hat bisher alles funktioniert, aber jetzt tritt folgendes Problem auf:

wenn ich den Find-Befehl nutze, kommt eine COM-Exception:
Schnittstelle nicht registriert (Ausnahme von HRESULT: 0x80040155)

Der Fehler tritt in folgendem Code-Abschnitt auf:


wdApp = new Word.ApplicationClass();
wdDoc = wdApp.Documents.Open(ref file, ...);
wdApp.Selection.Find.Execute(ref ftext, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdTrue, ref wdw, ref re, ref rtext, ref WordVariables.Variables.wdTrue, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse, ref WordVariables.Variables.wdFalse);

Habt ihr ne Idee woran das liegt?
Im "Inneren" der Exception wird die Interop.Word.dll erwähnt - habe mal versucht diese mit regsvr32 zu registrieren aber das klappt nicht.

Und da alle andere Word-Funktionen funktionieren - liegt die Find-Funktionalität in einer anderen Dll?

Ach - und die MS-Tipps (.NET und Office neu installieren) haben nicht geholfen.

Danke für alle Hinweise!
SvenC

17.08.2009 - 09:36 Uhr

Hallo herbivore,

habe jetzt deine Variante umgesetzt - funktioniert alles prima (auch wenn man eben in den Unterklassen die Props neu definieren muss).

Danke auch an alle anderen für Hinweise; werde mir das Problem vielleicht nochmal anschauen wenn .NET4 verfügbar ist.

14.08.2009 - 13:55 Uhr

List<Eigenschaftsklasse<TYPE>> ListOfProps {get;set;}

Damit würde die Liste aber nur noch Eigenschaftsobjekte von einem Typ aufnehmen, oder sehe ich das falsch?

14.08.2009 - 13:17 Uhr

Hallo,

ich beschäftige mich z.Z. näher mit .NET/C# und möchte in meinem Beispiel folgendes realisieren:

Ich habe ein Klasse "Hauptobjekt", welche unter anderem eine Liste enthält in der "Eigenschaftsobjekte" abgelegt werden. Die Eigenschaftsobjekte sind von den 3 Typen "Text-Eigenschaft", "Zahl-Eigenschaft" und "Datums-Eigenschaft" (alle 3 von Klasse "Eigenschaft" abgeleitet).

Wie realisiere ich nun in meiner Klasse "Hauptobjekt" eine Funktion, um den Wert einer Eigenschaft abzurufen? Ich weiss ja vorher nicht, ob die Eigenschaft eine Zahl, Text oder Datum ist - was nehme ich also als Rückgabewert für die Funktion GetValue()?
Ich könnte es ja event. über object machen, aber irgendwie erscheint mir das unsicher?!

Beispiel:


abstract class Hauptobjekt()
{
  List<Eigenschaftsklasse> ListOfProps {get;set;}
  TYP??? GetValue(string name)
  {
    // würde funktionieren, aber Wert kann von 3 verschiedenen Typen sein 
    // wie alse Rückgabewert der Funktion festlegen?
    ListOfProps.Find(p=>p.Name==name).Wert; 
  }
  ...
}

abstract class Eigenschaftsklasse()
{
  string Name {get;set;}
  TYP??? Wert {get;set;}
  ...
}

class TextEigenschaft: Eigenschaftsklasse
{
   new string Wert {get; set;}
}
class ZahlEigenschaft: Eigenschaftsklasse
{
   new double Wert {get; set;}
}
class DatumEigenschaft: Eigenschaftsklasse
{
   new DateTime Wert {get; set;}
}

Oder gehe ich ganz falsch an die Sache ran?
SvenC

12.08.2009 - 14:42 Uhr

Wenn ich die Property parent vom Typ Basissklasse belasse und dann nur bei Bedarf caste habe ich ja dann keine Möglichkeit zu sagen: Objekt von Subklasse3 darf nur Objekte von Subklasse2 als parent haben !?

Da nehme ich die parent-Definition doch besser mir ihren exakten Typen in die Subklassen auf.

Danke für eure Hinweise!
SvenC

12.08.2009 - 13:00 Uhr

Also hier nochmal ein Beispiel zur Verdeutlichung:


public class BaseClass
{
   public string Name { get; set; }
   ...
}

public class SubClass1:BaseClass   // for Root-Object
{
   public SubClass1 Parent { get; set; }
   ...
}
public class SubClass2:BaseClass
{
   public SubClass1 Parent { get; set; }
   ...
}
public class SubClass3:BaseClass
{
   public SubClass2 Parent { get; set; }
   ...
}

Die Property parent gibt es also in jeder Unterklasse. Ich würde sie deshalb gern schon in der Basisklasse definieren, scheitere aber daran da der Typ von parent von verschiedenen Subklassen sein kann.

SvenC

12.08.2009 - 12:36 Uhr

Hallo,

ich habe eine Frage zur Vererbung von Properties:

Ich habe eine Basisklasse, und von dieser leite ich verschiedene Unterklassen ab.
Die Objekte der Unterklassen werden dann "baumförmig" miteinander verbunden.
Dafür soll jede Unterklasse eine Eigenschaft "parent" bekommen, die bei der Initialisierung des jeweiligen Objektes mitgegeben wird.
Jede Unterklasse kann nur EINE andere Unterklasse als Parent-Typ haben, deshalb habe ich die Property "parent" bisher in den Unterklasse definiert, da ich nur dort den Parent-Typ festlegen kann.
Ist es aber möglich, die Property "parent" schon in der Basisklasse festzulegen? Dann müsste der Typ dort frei bleiben (Generika?), oder in der Unterklasse umgewandelt werden?

Die Alternative wäre, wenn ich zur Laufzeit rausfände welches Objekt mein aktuelles Objekt erzeugt hat, dann bräuchte ich die parent-Eigenschaft gar nicht - aber ich glaube das ist nicht möglich, oder?

Wäre dankbar für Hinweise dazu.
SvenC

10.10.2008 - 13:35 Uhr

Danke, das mit der ObjectDataSource hat funktioniert!

Es hat zwar ne Weile gedauert, bis ich herausgefunden habe dass man Parameter an die Select-Methode mittels "DefaultValue" übergeben muss (oder gibts da noch einen besseren Weg?), aber jetzt klappt alles!

Es würde mich aber trotzdem interessieren, ob der andere Weg über DataSource/DataBind prinzipiell nicht funktioniert, oder ob jemand ein Beispiel hat wo es geht?!

SvenC

08.10.2008 - 16:51 Uhr

Nein eine Fehlermeldung bekomme ich nicht.
Wenn ich im Debugger nach dem DataBind anhalte, ist auch die richtige DataSource hinterlegt.

Im Onclick des Suchen-Buttons rufe ich eine Funktion mit folgendem Inhalt auf:

HoleDaten();    // füllt globale DataTable tabErg
if (tabErg.Rows.Count < limitRows) 
{
     gvErgStamm.DataSource = tabErg;
     gvErgStamm.DataBind();
}

(Ist das Zuweisen der DataSource eigentlich jedesmal notwendig, oder reicht es beim ersten Mal?)

08.10.2008 - 15:43 Uhr

Hallo,

ich habe ein Problem mit dem GridView:
Auf meiner Seite habe ich einige Textbox, in die Suchkriterien eingegeben werden können. Beim Klick auf einen Button wird mit den Werten in den Textboxen eine Datenbankabfrage durchgeführt, damit eine DataTable gefüllt und diese via DataSource/DataBind an das Gridview gebunden.
Dann bekomme ich das gewünschte Ergebnis in der Gridview angezeigt.

Wenn ich nun ein Suchkriterium ändere (oder auch die gleiche Abfrage nochmal ausführe) bekomme ich immer nur ein leeres GridView zurück. Die dahinterliegende Datatable ist aber richtig gefüllt.

Ich muss dann die Seite neu öffnen, dann funktioniert es wieder genau ein mal.

Hat jemand eine Idee warum meine Daten nicht im GridView ankommen?

Danke
SvenC

12.08.2008 - 16:13 Uhr

Hallo,

ich habe gerade ein Problem mit dem Befüllen einer Excel-Vorlage.
Ich binde die "MS Excel 9.0 Object Library" ein und schreibe damit nach Excel 2000.
Unter Win2000 benötigt mein Programm ca. 45sek, unter WinXP sind es ca. 5min!
Hat jemand eine Idee woran das liegt? Ist das event. ein generelles Problem unter WinXP?

(An der Verwendung von Excel2000 kann ich nichts ändern, also fällt wohl ein Befüllen über XML weg.)

SvenC

25.07.2008 - 13:10 Uhr

Also das mit der Schablonenmethode klingt ganz gut - auch wenn es mich ein wenig mehr einschränkt (bzgl. Ablauf innerhalb der Methode) als ich es geplant hatte.
Aber ein wenig mehr Ordnung kann ja nicht schaden 😉 !

Danke für die Hinweise!

SvenC

25.07.2008 - 11:01 Uhr

Hallo,

ich habe mir ein Interface IReport erstellt, welches eine Property und eine Methode "macheWas()" deklariert.
Wenn ich nun von diesem Interface eine Klasse erstelle, kann ich ja im VS über einen Klick auf das IReport den entsprechenden Code in die Klasse einfügen.

Kann ich es irgendwie einrichten, das die eingefügte Methode "macheWas()" bereits Code enthält - also z.B. schon die Aufrufe holeDaten() und schreibeDaten() beinhaltet?

SvenC

18.07.2008 - 12:03 Uhr

... ich musste nur noch in der FormProgress.designer.cs hinter "class FormProgress" das <B> hinzufügen (ich dachte das macht das VS automatisch?) - jetzt funktioniert alles!

Danke nochmal an alle für die Hilfe!

SvenC

18.07.2008 - 08:55 Uhr

Hallo JuyJuka,

Danke für deine Hilfe, so in der Richtung hatte ich mir das vorgestellt.
Allerdings ist mir das ", new()" an dieser Stelle völlig neu! Was hat es denn damit auf sich?

Dieses new() ist sicherlich auch irgendwie dafür verantwortlich, dass ich jetzt in der FormProgress.Designer.cs folgenden Fehler bekomme:

FormProgress.Dispose(bool)": Es wurde keine passende Methode zum Überschreiben gefunden.

17.07.2008 - 16:12 Uhr

Hallo,

ich habe folgendes Problem:

beim Klick auf einen Button wird ein kleines Form geöffnet, welches eine ProgressBar und ein Textfeld einthält und eine Instanz der Klasse MeinBericht anlegt.
Im "FormShown"-Event des Forms wird dann die MeinBericht.erstelleBericht()-Methode aufgerufen.

Nun möchte ich mein Form dynamischer machen - es soll für verschiede Berichtstypen funktionieren. Ich gebe dem Kostruktor den Typ mit (MeinBericht1 oder MeinBericht2; alle vom Interface IBericht abgeleitet mit einer Methode erstelleBericht()), und davon soll dann im Kostruktor ein Objekt angelegt werden und im FormShown-Event die erstelleBericht()-Methode aufgerufen werden.

Hier mein bisheriger Stand:

public partial class FormProgress : Form
{
   MeinBericht1 myRep;
     
   public FormProgress()
   {
            wndHandle = this.Handle;
            myRep = new MeinBericht1();

            this.Shown += new EventHandler(FormProgress_Shown);            
   }        

   void FormProgress_Shown(object sender, EventArgs e)
   {                                    
            if (myRep.erstelleBericht(Jahr, ID, wndHandle) == -1)
                MessageBox.Show(repProj.ErrorMessage);

            this.Close();
   }
}

Aufruf über:

FormProgress fp = new FormProgress();
fp.ShowDialog();

Wie bekomme ich das hin? Generics? Delegates?

05.10.2007 - 08:33 Uhr

Ach so - ist ja eigentlich ganz einfach (wenn man es weiss 🙂 )

Danke für die Hilfe!

Aber so nebenbei würde mich schon noch interessieren, wie dass mit den nachfolgenden Events (also z.B. das onlick des Abbrechen-Buttons) technisch funktioniert. Hängen diese nun irgendwo in einer Warteschleife, oder sind sie zu diesem Zeitpunkt noch gar nicht ausgelöst?

04.10.2007 - 17:05 Uhr

Woher weiss ich denn welcher Button gedrückt wurde? Das Validating-Event der TabPages kommt ja vor dem Click des Buttons! Deshalb war ja meine Hoffnung dass es eine Warteschleife der noch anstehenden Events gibt?

04.10.2007 - 16:02 Uhr

Hallo,

ich habe ein Formular mit einem TabControl und 2 Buttons (OK und Abbrechen).
Für die einzelnen Tabpages wird das Validating-Ereignis aufgerufen (z.B. beim Wechsel zwischen den Tabs), um die Daten zu prüfen und zu speichern. Wenn nun die Prüfung Fehler zurückgibt, breche ich das event ab (CancelEventArgs.Cancel) und bleibe auf der aktuellen TabPage.
Allerdings funktioniert dadurch im Falle der fehlerhaften Überprüfung auch mein Abbrechen-Button nicht mehr!
Kann ich nun im Validating-Ereignis schon herausfinden, ob der OK- oder Abbrechen-Button gedrückt wurde (oder allgemeiner: welche Events noch folgenn werden, z.B. das onClick der Buttons)?

SvenC

21.09.2007 - 14:23 Uhr

... über OleDB

OleDbConnection ExcelConnection = new OleDbConnection(constr);
OleDbCommand ExcelCommand = new OleDbCommand();
ExcelCommand.Connection = ExcelConnection;
OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand);
ExcelConnection.Open();

ExcelCommand.CommandText = "Select * from [tabelle1$]";
ExcelAdapter.Fill(dt);

21.09.2007 - 14:06 Uhr

Hallo,

ich möchte eine Excel-Tabelle in eine DataTable einlesen.
Wenn nun eine Spalte in Excel von der ersten Zeile an gefüllt ist, klappt das auch.
Wenn aber die ersten x Zeilen einer Spalte leer sind und erst dann ein Wert in der Spalte steht, bleibt die ganze Spalte in der DataTable leer.

Woran könnte das liegen?

22.08.2007 - 09:54 Uhr

OK ich nutzte jetzt das DataBindingComplete-Event und setze dort die Spalte auf visible=false. Dachte das DataGridView.Show() wartet bis alle Daten geladen sind, aber ist wohl nicht so.

Danke für die Hilfe!

22.08.2007 - 09:05 Uhr

Hallo,

ich habe gerade eine DataTable per OleDb mit Daten gefüllt und als DataSource an ein DataGridView gebunden. Ein dgv.Show() zeigt die Daten auch an.
Nun möchte ich die erste Spalte ausblenden (über dgv.Columns[0].Visible bzw. .readonly). Allerdings kennt er die Spalten noch gar nicht - dgv.Columns.Count ist 0!
Ab wann sind denn die Zeilen und Spalten nun vorhanden?

Hier nochmal der Codeausschnitt:

dgvKst = new DataGridView();
dgvKst.Name = "dgvKst";
dgvKst.Location = panel1.Location;
dgvKst.Width = panel1.Width;
dgvKst.Height = panel1.Height;
readData();
dgvKst.DataSource = tabKst;
panel1.Controls.Add(dgvKst);
dgvKst.Columns[0].Visible = false;
dgvKst.Show();

SvenC

16.08.2007 - 12:49 Uhr

Ich hatte mir das DataGrid nicht angeschaut, weil ich immer dachte das DataGridView ist "neuer" und "besser" 😉

Jedenfalls habe ich jetzt das DataGrid-Beispiel aus der Hilfe getestet - macht zwar eigentlich das was ich brauche - hat aber den nachteil dass man immer die untergeordneten Objekte erst anklicken muss und dann in einer neuen Tabelle sieht.

Für meine Zwecke wäre wahrscheinlich etwas TreeView-Ähnnliches besser - aber da mangelt es wieder an Sortiermöglichkeiten.

Ich werde also jetzt einfach alle Objekte in einer Tabelle darstellen und versuchen über Formatierungen etwas Hierarchie reinzubringen!

14.08.2007 - 15:52 Uhr

Hallo Friedel,

die Komponente von http://www.devexpress.com/Products/NET/WinForms/XtraGrid/Index.xml
ist eigentlich genau das was ich suche -
aber kosten darf es natürlich nichts 😉

Habe mir mal einige Sachen auf http://www.codeproject.com/ angeschaut und werde mal sehen ob ich mir daraus etwas passendes basteln kann.

SvenC

14.08.2007 - 14:37 Uhr

Hallo Friedel,

diese Beispiel habe ich mir auch schon angeschaut.
Es ist aber in meinem Fall unpraktisch, erst oben einen Datensatz zu wählen um unten die zugehörigen Detaildatensätze zu sehen - sie sollten schon untereinander in einer Tabelle stehen.
Trotzdem Danke für den Hinweis!

14.08.2007 - 13:20 Uhr

Hallo,

hat jemand eine Idee wie man in einer Tabelle (GridView o.Ä.) Daten hierarchisch darstellen kann?
Ich möchte z.B. Aufgaben tabellarisch anzeigen (mit den zugehörigen Eigenschaften als Spalten), und dann pro Aufgabe n Teilaufgaben. Mein Problem ist, dass die Teilaufgaben andere Eigenschaften haben, und ich somit nicht für beide die gleichen Spalten verwenden kann.
Die Spalten sollten sortierbar sein, und die Felder möglichst auch editierbar!

Bin für alle Hinweise dankbar!

SvenC