Zum Inhalt springen

ronaldus

Mitglieder
  • Gesamte Inhalte

    38
  • Benutzer seit

  • Letzter Besuch

Beiträge von ronaldus

  1. Hallo Tician,

    private Microsoft.Office.Interop.Excel.Application myExcelApplication = null;
    private Microsoft.Office.Interop.Excel.Workbook myExcelWorkbook = null;
    
    
    private void Release()
            {
                myExcelApplication.Quit();
                releaseObject(myExcelWorkbook);
                releaseObject(myExcelApplication);
            }
    
            private void releaseObject(object obj)
            {
                try
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                    obj = null;
                }
                catch (Exception ex)
                {
                    obj = null;
                    MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
                }
                finally
                {
                    GC.Collect();
                }
            }

    Gruß

     

    Ronald

  2. Hi,

    Du musst definieren, was im DGV angezeigt werden soll...

    
    this.dgv.AutoGenerateColumns = false;
    
    
     private bool datagridViewKonfiguriert = false;
    
    
            /// <summary>
    
            /// Erstellt Grid-Ueberschriften und definiert Anzeigewerte
    
            /// </summary>
    
            private void BuildGridHeaderForGrid()
    
            {
    
                if (datagridViewKonfiguriert)
    
                {
    
                    // Die Konfiguration wurde bereits einmal durchlaufen.
    
                    // -> Keine weitere Aktion
    
                    return;
    
                }
    
    
                DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
    
                idColumn.HeaderText = "ID";
    
                idColumn.DataPropertyName = "Id";
    
                idColumn.ReadOnly = true;
    
                this.dgv.Columns.Add(idColumn);
    
    
                DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
    
                nameColumn .HeaderText = "Name des Users";
    
                nameColumn .DataPropertyName = "Name";
    
                this.dgv.Columns.Add(nameColumn );
    
    
    ....weitere Spalten....
    
    
    // Merken, dass die Liste konfiguriert wurde
    
                this.datagridViewKonfiguriert = true;
    
    
    }
    
    

    BuildGridHeaderForGrid() z.B. beim Initialisieren der Form aufrufen....

    Wichtig: DataPropertyName = muss als Property definiert sein...

    So kannst Du nur bestimmte Werte des gebundenen Objektes im DGV anzeigen.

    Gruß Ron

  3. Hi,

    habe etwas in der msdn gefunden...

    Es scheint so, als ob man gar keine neue Word Application starten muss...

    
    Private document1 As Word.Document = Nothing
    
    
    Private Sub ThisAddIn_Startup() Handles Me.Startup
    
    SetzeFont()
    
    End If 
    
    
    Private Sub SetzeFont()
    
    document1 = Me.Application.Documents.Add()
    
    document1.Selection.Font.Name = "Arial"
    
    End Sub
    
    

    Hier der Link:

    Extending Word Documents and Excel Workbooks in Application-Level Add-ins at Run Time

    Jetzt muss es doch hoffentlich mal klappen...

    Gruß Ron

  4. Hi,

    das ist doch wirklich kniffelig....

    Versuch mal...

    
    
    bool init = false;
    
    
    Private Sub ThisAddIn_Startup() Handles Me.Startup
    
    
    if(!init)
    
    {
    
       //OBJECTS OF FALSE AND TRUE
    
       Object oTrue = true;
    
       Object oFalse = false;
    
    
        //CREATING OBJECTS OF WORD AND DOCUMENT
    
        Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
    
         Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document(); 
    
    
          //MAKING THE APPLICATION VISIBLE
    
           oWord.Visible = true;    
    
    
           //ADDING A NEW DOCUMENT TO THE APPLICATION
    
           oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    
    
    
           oWord.Selection.Font.Name = "Arial";
    
    
           init = true;
    
    
    }
    
    
    End Sub
    
    

    Gruß Ron

  5. Hi,

    mit dem Methoden-Zusatz

    Private Sub ThisAddIn_Startup() Handles Application.DocumentOpen

    registrierst Du ein Event, das abgefeuert wird, wenn das Dokument hinzugefügt wird.

    In dem Code entsteht scheinbar eine Endlos-Schleife, weil der Event bei jedem Aufruf der Methode erneut abgefeuert wird...bevor es in die Dokument-Liste hinzugefügt wird...

    Du solltest einen anderen Event registrieren...

    Private Sub ThisAddIn_Startup() Handles Me.Startup

    damit sollte der Event nur einmal abgefeuert werden...

    Ich kann das leider nicht ausprobieren...aber es sollte klappen.

    PS: Oder das Handles... einfach weglassen, man braucht doch eigentlich gar kein Event, oder?

    Gruß Ron

  6. Hi,

    es scheint, als ob das StartUp-Event bei Neuanlage eines Dokumentes immer wieder abgefeuert wird, Deine Prozedur Private Sub ThisAddIn_Startup() Handles Application.DocumentOpen immer wieder aufgerufen wird...

    ....Startup Event

    The Startup event is raised for each of the host items (document, workbook or worksheet) after the document is running and all the initialization code in the assembly has been run. It is the last thing to run in the constructor of the class that your code is ....

    Vielleicht kann man einen Trick anwenden..

    
    ....
    
    if (oWord.Documents.Count == 0)
    
       {
    
         //ADDING A NEW DOCUMENT TO THE APPLICATION
    
         oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    
         oWord.Selection.Font.Name = "Arial";  
    
       }
    
    
    

    Gruß Ron

  7. Hi,

    hast Du ein Verweis in Deinem Projekt auf Microsoft.Office.Interop.Word?

    Folgender Code funktioniert bei mir:

    
    //OBJECT OF MISSING "NULL VALUE"
    
                Object oMissing = System.Reflection.Missing.Value;
    
    
               //OBJECTS OF FALSE AND TRUE
    
                Object oTrue = true;
    
                Object oFalse = false;
    
    
                //CREATING OBJECTS OF WORD AND DOCUMENT
    
                Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
    
                Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document(); 
    
    
                //MAKING THE APPLICATION VISIBLE
    
                oWord.Visible = true;    
    
    
                //ADDING A NEW DOCUMENT TO THE APPLICATION
    
                oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    
    
    
                oWord.Selection.Font.Name = "Arial";
    
    

    PS: Du entwickelst in VB, der Beispielcode ist C#, müsstest Du natürlich umstellen...

    Gruß Ron

  8. Hi,

    Du musst ein Word Document erzeugen und es der Anwendung übergeben...

    
    //OBJECT OF MISSING "NULL VALUE"
    
    Object oMissing = System.Reflection.Missing.Value();
    
    
    //OBJECTS OF FALSE AND TRUE
    
    Object oTrue = true;
    
    Object oFalse = false;
    
    
    //CREATING OBJECTS OF WORD AND DOCUMENT
    
    Word.Application oWord = new Word.Application();
    
    [B]Word.Document oWordDoc = new Word.Document();[/B] 
    
    
    //MAKING THE APPLICATION VISIBLE
    
    oWord.Visible = true;    
    
    
    //ADDING A NEW DOCUMENT TO THE APPLICATION
    
    [B]oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);[/B]
    
    
    ...und dann solltest Du die Schriftart ändern können...
    
    oWord.Selection.Font.Name = "Schriftart"
    
    

    Gruß Ron

  9. Hi,

    nach meiner Meinung solltest Du anstatt eines Arrays eine List<User> benutzen.

    Diese dann dem DGV als Datatsource zuordnen...

    
    xyzBindingSource.DataSource = myUsers (...hier die List<User>!)
    
    dgv.Datasource = xyzBindingSource;
    
    
    Dann kannst Du im Zeilen-Doppelclick Ereignis des DGV das selektierte User-Objekt ohne aufwendige Index-Prüfung abholen...
    
     private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    
            {
    
                User currentUser = null;
    
    
                if (xyzBindingSource.Current != null)
    
                {
    
                    currentUser = xyzBindingSource.Current as User;
    
                }
    
    
                if (currentUser != null)
    
                {
    
                    hier hast Du die Referenz....
    
                }
    
    }
    
    

    Gruß Ron

  10. Hi,

    zu Deiner Frage: Wie kann man die Details ansehen?

    Ich würde eine Klasse Benutzer erstellen, die alle Attribute, welche die Detailansicht fordert enthält.

    Dann kannst Du aus der Datenbank alle Benutzer laden und als Liste von Benutzer-Objekten halten.

    Diese Liste übergibst Du dem Datagridview als Datasource. Wenn Du nur bestimmte Attribute anzeigen möchtest wie z.B. Name kannst Du das definieren:

    
    DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
    
    idColumn.HeaderText = "ID";
    
    idColumn.DataPropertyName = "Id";
    
    idColumn.ReadOnly = true;
    
    this.dgv.Columns.Add(idColumn);
    
    
    DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColum();
    
    nameColumn.HeaderText = "Name";
    
    nameColumn.DataPropertyName = "Name";
    
    this.dgv.Columns.Add(nameColumn);
    
    
    
    Wichtig hierbei ist, das die Benutzerklasse eine Property "Name" besitzt, die dann abgerufen wird. Wenn Du eine Zeile im Datagridview selektiert hast, kannst Du eine Objekt-Referenz erzeugen...
    
    Benutzer currentBenutzer = null;
    
    
                if (BindingSource.Current != null) (Bindingsource vom DatagridView!)
    
                {
    
                    currentBenutzer = BindingSource.Current as Benutzer
    
                }
    
    
                if (Benutzer!= null)
    
                {
    
                      .....
    
                }
    
    

    Dieses Benutzer-Objekt kannst Du nun für Deine Detailsansicht verwenden...

    Gruß Ron

  11. Hi,

    Hierbei handelt es sich um Variablendefinitionen.

    Die ersten Zahlen (01, 03...) sind Stufennummern. 01 ist die höchste Stufennummer und mit 03 können Unterelemente definiert werden. D.h. DOCUMENT-TITLE hat zwei Unterelemente. Diese können im Code einzeln angesprochen werden oder mit dem Überelement.

    PIC X(80) ist die Picture-Klausel...

    Genaueres kannst Du auch nachlesen...

    COBOL ? Wikipedia

    COMP Felder sind gepackt...

    Einfach mal googeln!

    Ich habe so ein bisschen verfolgt, dass Du Deine Diplomarbeit darüber schreiben möchtest. Da wäre es sicher hilfreich Dich ein wenig mit COBOL auseinander zu setzen. Deine Frage betrifft absolute Basics, wenn Du ein Programm portieren möchtest solltest Du diese mindestens drauf haben.

    Gruß Ron

  12. Hi,

    vielleicht solltest Du anders vorgehen:

    1. Hole alle Wörter aus der DB

    
    
    Reader = command.ExecuteReader();
    
    
    List<string> alleWoerter = new List<string>;
    
    
    while (reader.Read())
    
    {
    
         alleWoerter.Add(Reader.GetString("Wort"));
    
    }                         
    
    
    2. Dann Zufallszahl bestimmen...und aus Wort aus der Liste holen
    
    int max = alleWoerter.Count;
    
    
    Random zufall = new Random();
    
    int randomID = zufall.Next(max);
    
    
    string wort = alleWoerter[randomID];
    
    

    Die Verarbeitung ist einfacher und nicht so Fehleranfällig...

    Gruß Ron

  13. Hi,

    ich würde das Select dynamisch zusammenbauen...

    Du rufst eine Methode auf, deren Signatur alle 4 Parameter enthält. Leere Werte übergibst Du mit NULL.

    Dann Kannst du das SELECT zusammenbauen...

    string s = "SELECT * FROM IRGENDWAS WHERE ID NOT NULL AND "

    if(param1 != null){

    s = s+ "irgendwas =" + param1 + "AND"

    }

    und so weiter...

    Gruß Ron

  14. Du willst ja eine Datei öffnen...

    
    string workbook = excelPath;
    
    
                xlWorkbook = xlApplication.Workbooks.Open(
    
                    excelPath, 0, false, 5,
    
                    "hallo", "hallo", true, XlPlatform.xlWindows, "\t",
    
                    false, false, 0, false, 0, false
    
                );
    
    
                // Wir nehmen das Lager-Arbeitsblatt
    
                try
    
                {
    
                    xlWorksheet = xlWorkbook.Worksheets["Lager"] as Worksheet;
    
                    xlWorksheet.Unprotect("hallo");
    
    
                }
    
                catch (Exception)
    
                {
    
                    MessageBox.Show("Kein Arbeitsblatt 'Lager' vorhanden!");
    
                    return;
    
                }
    
    

    ...trage dein Pfad in excelPath ein...und ändere das Blatt was Du öffnen möchtest...

    mfg ron

  15. habe so etwas in C# gemacht....

     
    
    // First Contact: Excel Prozess initialisieren
    
    myExcelApplication = new Microsoft.Office.Interop.Excel.Application();
    
    myExcelApplication.Visible = true;
    
    myExcelApplication.ScreenUpdating = true;
    
    
    // Excel Datei anlegen: Workbook
    
    var myCount = myExcelApplication.Workbooks.Count;
    
    myExcelWorkbook = myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value) as Microsoft.Office.Interop.Excel.Workbook;
    
    if (myExcelWorkbook == null)
    
    {
    
        throw new ArgumentNullException();
    
    }
    
    

    Vielleicht hilft Dir das etwas weiter...

    mfg ron

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...