Laden...

Forenbeiträge von Edzio Ingesamt 68 Beiträge

14.10.2020 - 09:06 Uhr

also mit dem Chromium hat es gut geklappt
sogar mit meinem tabControl und in ein paar Tabs eine feste Seite einzubinden.
Danke nochmal.

Grüßle

P.S.:
Falls irgendjemand auch mehrere Tabs befüllen will hier n Code Beispiel
Code Beispiel meherere Tabs befüllen

Und der Grundaufbau:

Grundaufbau

12.10.2020 - 10:16 Uhr

ok danke
schau ich mir an. Bei Fragen meld ich mich wieder 😃

12.10.2020 - 10:03 Uhr

Hallo zusammen,

ich habe eine Windows Form, mit einem TabControl, unter anderem hab ich dort einen Reiter, in dessem ich einen Webbrowser platziert habe, und ihm eine feste URL gegeben habe.
Starte ich nun die Anwendung und die URL wird aufgerufen, erscheint eine JavaScriptfehlermeldung
(Bild siehe Anhang)

Rufe ich die selbe Seite im Internetexplorer auf, kommt keine Fehlermeldung (Im Netz steht, dass der "Webbrowser" die Einstellungen vom IE nutzt).

Was ist hier falsch, bzw. was kann ich machen /muss ich beachten?

Danke. im voraus Gruß

22.02.2018 - 14:17 Uhr

hab mich grad ein wenig eingelesen,
das sieht sehr kompliziert aus, da werde ich noch eine Weile benötigen.

Gruß Frank

22.02.2018 - 12:18 Uhr

Huhu,

mh dann hab ich was überlesen,
also bin ich auf dem richtigen Weg?

Bin halt noch nicht sooo erfahren in vielen Funktionen etc. deshalb vlt auch die "noobigen" Fragen.

22.02.2018 - 10:41 Uhr

Hallo zusammen,

ok super danke, das mit dem
https://outlook.office365.com/EWS/Exchange.asmx
funktioniert,
nun steh ich vor einem neuen Problem und zwar bei der Anmeldung.

ExchangeCredentials ECcredentials = new WebCredentials("username", "Passwort");

Der Username ist keine Problem, aber das Passwort.
Ich will nicht statisch mein Passwort und mein Nutzer verwenden, sondern dass der
jeweilige User sich anmeldet.
Kann man das Windowspasswort übergeben (nur übergeben, nicht speichern sonst irgendwas) ohne dass der User sich jedesmal manuell anmelden muss?

P.S.: habe

service.UseDefaultCredentials = true;

probiert geht aber nicht, da der Username nicht passt
ist bei uns name@firma.de

19.02.2018 - 15:22 Uhr

Hallo zusammen,

ich habe seither über mein Programm einen "Termin" in den Mailbox Kalender eintragen können, dies habe ich über:


ExchangeService service = new ExchangeService();
service.AutodiscoverUrl(exchange_mailbox, RedirectionUrlValidationCallback);
            Appointment meeting = new Appointment(service);


 meeting.Subject = projektnummer_aus_form1 + "--" + aktuelle_benutzer;
            meeting.Body = "Grobveranschlagte Arbeitszeit für das Projekt >><b>"+projektnummer_aus_form1+"</b><< Seitens der Entwicklung/Konstruktion.<br><br>" + 
                           "Diese Zeit kann jedoch variieren aufgrund sämtlicher Einflüsse wie (Fehlprojektierungen, Wartezeiten, Urlaubszeiten, Krankheitszeiten etc.)";
            //Zeit einstellen
            meeting.IsAllDayEvent = true;
            meeting.Start = startzeit;
            meeting.End = endzeit;
 //Farbe Kategorie einstellen
            meeting.Categories.Add(aktuelle_benutzer);

            //Erinnerung einstellen
            meeting.IsReminderSet = false;
            //meeting.ReminderMinutesBeforeStart = 60;

            // Send the meeting request
            meeting.Save(new FolderId(WellKnownFolderName.Calendar, exchange_mailbox));






 private static bool RedirectionUrlValidationCallback(string redirectionUrl)
        {
            // The default for the validation callback is to reject the URL.
            bool result = false;

            Uri redirectionUri = new Uri(redirectionUrl);

            // Validate the contents of the redirection URL. In this simple validation
            // callback, the redirection URL is considered valid if it is using HTTPS
            // to encrypt the authentication credentials. 
            if (redirectionUri.Scheme == "https")
            {
                result = true;
            }
            return result;
        }

realisiert, hat auch wunderbar funktioniert.

Unsere IT hat aber nun auf Exchange Online umgestellt,
davor war Exchange OnPromise.
Nun bekomme ich dauernd den Fehler, dass AutodiscoverUrl nicht lokalisiert werden kann.
Nach einem Nachfragen in der IT heißt es, dass das nicht mehr geht.

Nach vielem Googeln habe ich auch nichts passendes gefunden.

Weiß zufällig einer von euch etwas, wie ich weiterhin die "Termine" in den Cloudkalender bekomme?

Danke im Voraus.

Gruß Frank

15.07.2016 - 09:17 Uhr

ok schade,
dann müßen die Kollegen, welche ein neues Office bekommen eben die Datei nachinstallieren.
Auch doof gelöst von Microsoft.

Danke für eure Hilfe.

Gruß Frank

14.07.2016 - 07:22 Uhr

ok danke, dann versuch ich das mal.
Irgendeinen Verweis gibt es nicht, den ich einbinden könnte?

13.07.2016 - 11:23 Uhr

Hallo zusammen,

ich nutze um eine Exceltabelle auszulesen die OLED Technologie:

var excelFile = verbindung_zu_definitionen.getPfad();
                var hdr = "Yes";                    //hasHeaders ? "Yes" : "No";
                var binding_excel = new BindingSource();
                string connectionString;
                //Prüfen welches Excel OLEDB geladen werden soll
                if (excelFile.Substring(excelFile.LastIndexOf('.')).ToLower() == ".xlsx")
                    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile +
                                ";Extended Properties=\"Excel 12.0 Macro;HDR=" + hdr + ";IMEX=1\"";
                else
                    connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + 
                                ";Extended Properties=\"Excel 8.0;HDR=" + hdr + ";IMEX=1\"";

Sämtliche Kollegen nutzen mein Tool ohne Probleme
(Win7 64bit Office 2007)
Nun hat ein Kollege einen neuen PC bekommen mit
Win7 64bit Office 2013
und bei ihm funktioniert der Aufruf nicht mehr,
es kommt der Fehler:> Fehlermeldung:

Microsoft.ACE.OLEDB.12.0 Provider ist nicht auf dem lokalen Computer regisitriert.

Nach meiner Recherche fand ich sämtliche Angaben, dass er folgendes installieren soll:
https://www.microsoft.com/de-de/download/confirmation.aspx?id=23734

Meine Frage,
kann ich da auch irgendwas in mein Programm über den VS2015 einbinden (Verweis o.Ä.), so dass nicht jeder der nun ein neues Office bekommt selbstständig etwas installieren muss?

Wollte schon den Verweis
Microsoft Office 12.0 Access Database Engine Object Library
hinzufügen, das nimmt er allerdings nicht.

Danke im Voraus.

Gruß Frank

25.11.2015 - 09:59 Uhr

ok danke,
dann versuch ich das mal.

Gruß

23.11.2015 - 10:13 Uhr

Hallo zusammen,

in meinem Code erstelle ich eine E-Mail mit HTML Body.
In der Vorschau sieht die "E-Mail" auch so aus, wie ich es mir gedacht habe.
Wird diese nun versendet und man betrachtet sie unter Outlook 2007 oder 2013
so fehlt ein Teil meiner Style Formatiereung der Tabelle.
Im Internet habe ich bereits gesucht, ob Outlook gewisse HTML Codes nicht kann,
laut meiner Recherche sind color, background-color, font-wight und font-size aber machbar.

Sieht jemand irgend einen anderen Grund, dass es nicht funktioniert?

using system.net.mail
...
                string nachricht_mail4 ="<font face =arial>" + 
                                        "<table border=0 cellpadding=2 cellspacing=2>" +
                                         " <tbody>" +
                                             "<colgroup>" +
                                                    "<col width=250>" +
                                                    "<col width=250>" +
                                                "</colgroup>" +
                          DAS hier funktioniert nur zum Teil                  "<tr style=color:#4169e1; style=background-color:#D3D3D3; style=font-weight:bolder; style=font-size:large>" +
                                                "<td colspan=2>Projekt beendet</td>" +
                                                "<td align=right>" + DateTime.Now.ToShortDateString() + "</td>" +
                                            "</tr>" +
                                            "<tr>" +
                                                "<td>Projekt:</td>" +
                                                "<td>" + mail4projektnummer + "</td>" +
                                            "</tr>" +
                                            "<tr>" +
                                                "<td>Projektleiter:</td>" +
                                                "<td>" + mail4empfaenger + "</td>" +
                                            "</tr>" +
                                            "<tr>" +
                                                "<td>Entwickler:</td>" +
                                                "<td>" + mail4absender + "</td>" +
                                            "</tr>" +
                                          "</tbody>" +
                                        "</table>" +
                                        
					"<br>wurde abgeschlossen." +
                                        
					"<br><br><b><u>Team 1 & 2 & 3:</u></b>" +
                                        "<br>Die fertigen Zeichnungen befinden sich im Projektlaufwerk in dem Ordner xyz!" +
                                        "<br>Link Projektlaufwerk:<br>" +
                                        "<A HREF=file:///" + gesamt_ordner_pfad + ">PROJEKT-GRUND-ORDNER</A> <sub><small>(Aktuelle Version ist zu beachten)</small></sub>" +
                                        
                                        "<br><br><b><u>Team 4:</u></b>" +
                                        "<br>Die fertigen Zeichnungen befinden sich unter der jeweiligen Projektnummer im" +
                                        "<br><A HREF=http://abbbabbaaa.bbabba:1234/mmweb/index.jsp >Model-Manager</A>" +
                                        "<br>oder im" +
                                        "<br><A HREF=https://hjhjhjhjhj.com/app/tcomp/xyzz</A>" +
                                        "<br>Link Projektlaufwerk:<br>" +
                                        "<A HREF=file:///" + gesamt_ordner_pfad + ">PROJEKT-GRUND-ORDNER</A> <sub><small>(Aktuelle Version ist zu beachten)</small></sub>" +
                                        "<br><i>Hinweis:</i><br>" +
                                        "<i>Vorabmodelle befinden sich im Ordner 2.5</i>" +
                                        "</font>";

                Email_Projekt_abgeschlossen.Body = nachricht_mail4;
                Email_Projekt_abgeschlossen.IsBodyHtml = true;
...

Im Anhang habe ich noch ein Bild, wie es in der Vorschau aussieht und nachher als Mail ankommt.
Outlook ist auf HTML gestellt.

Kann das mit dem FirmenMail-Server zusammenhängen, dass er bestimmte Styles blockiert?

Danke im Voraus.

Gruß

16.09.2015 - 12:32 Uhr

passt danke 😃
hast mir schon viel geholfen

15.09.2015 - 13:27 Uhr

Hi,
ok die Kategoriennamen kenn ich.
Die Farbe funktioniert auf diesem Weg 😃

Kann man die Kategorienliste nicht aus der Mailbox auslesen,
und so alle aktuellen Namen erhalten um diese dann zu setzen?

Würde Arbeit ersparen, wenn z.b. eine neue Kategorie im Outlook erzeugt wird.

Gruß

11.09.2015 - 14:34 Uhr

ja perfekt
nur eine Zeile angepasst 😃

 meeting.Save(new FolderId(WellKnownFolderName.Calendar, "andere_mailbox@firma.de"));

Weißt du/ihr noch zufällig, wie ich einem Ereignis einer Kategorie, welche ich über das Outlook
angelegt habe, zuteile?
also z.B.:
Termin hat Farbe blau Text Wichtig

gibt es da bei dem EWS etwas in der Richtung
meeting.Categorie = Color.blue;

Gruß

11.09.2015 - 14:20 Uhr

Hallo Taipi88,

danke dir.
Werde deine Vorschläge ausprobieren.

Gruß

11.09.2015 - 12:46 Uhr

Hallo zusammen,

irgendwie check ich gerade was nicht mit der Erstellung eines Termins per EWS.

Ich habe eine eigene Mailbox und eine andere firmeninterne Mailbox, auf welche ich die Berechtigung besitze und diese auch im Outlook eingebunden habe.

Nun erstell ich ein Ereignis (keine Besprechung) mit Hilfe folgendes Codes:

 private void kalender_eintrag_erstellen()
        {

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
            service.AutodiscoverUrl("andere_mailbox@firma.de", RedirectionUrlValidationCallback);
            Appointment meeting = new Appointment(service);
            //service.TraceEnabled = true;
            //service.TraceFlags = TraceFlags.All;

            
            // Set the properties on the meeting object to create the meeting.
            meeting.Subject = projektnummer_aus_form1 + "--" + aktuelle_benutzer;
            meeting.Body = "Grobveranschlagte Arbeitszeit für das Projekt Seitens der Entwicklung/Konstruktion.\r\n" + 
                           "Diese Zeit kann jedoch variieren aufgrund sämtlicher Einflüsse wie (Fehlprojektierungen, Wartezeiten, Urlaubszeiten, Krankheitszeiten etc.)";
            //Zeit einstellen
            meeting.IsAllDayEvent = true;
            meeting.Start = DateTime.Now;
            meeting.End = meeting.Start.AddDays(5);

            //Erinnerung einstellen
            meeting.IsReminderSet = false;
            //meeting.ReminderMinutesBeforeStart = 60;

            // Send the meeting request
            meeting.Save(WellKnownFolderName.Calendar, SendInvitationsMode.SendToNone);
        }

Das komische ist, obwohl ich die andere firmeninterne Mailbox anspreche, bekomme ich dieses Ereignis in meine eigenen Mailbox gesetzt.
Wie bekomme ich dieses Ereignis nur in die andere Mailbox?

Ich habe über das Outlook Kategorien erzeugt (Farbe + Name)
kann ich die Kategorien je nach Name dem Ereignis zuteilen?

Danke im Voraus.

Gruß

22.07.2015 - 07:25 Uhr

Morgen Taipi88,

danke für die Info,
dann versuch ich mal mein Glück 😃

Gruß

17.07.2015 - 11:21 Uhr

die Stichpunkte von wcseller sind schon in die Richtung wie ich es mir erst mal vorgestellt habe.
Nur immer diese Zusatz-Aussagen
wie
geh doch googeln
wir machen nicht deine Arbeit
...
nerven

Ich such, bevor ich hier etwas poste, nach Lösungen,
wenn ich nichts finde oder ich bei manchen Dingen nur Bahnhof verstehe (bin nicht Profi)
poste ich um Rat zu suchen...

Mein falls jemand soetwas ähnliches schon gemacht / gegoogelt hat und z.B. einen Link hat ist das auch ok.

Was komplett fertiges mit copy paste einfügen will ich auch nicht, dann weiß ich nicht mal was der Code alles so anstellt...

17.07.2015 - 10:59 Uhr

Naja war doch eine normale Frage,
und es geht nicht darum ob jemand "meine Arbeit" macht.
Ich frage nach einem Tip von Leuten die Profis sind,
wie man am besten an die Sache herangehen kann...

Schickst du deinen Lehrling auch googeln wenn er nach einem Tip fragt?

Danke dennoch für die Stichworte.

17.07.2015 - 10:28 Uhr

Hallo zusammen,
hat mir jemand einen guten einfachen tip,
wie ich in ein ganz normales Windows Form einen freigegeben Outlook-Kalender (Exchangeserver vorhanden)
abbilden kann,
einträge tätigen kann (neue eintragen, ändern, löschen)
automatisch aktualisiert...

Neuerdings habe ich das neue Visual Studio 2015 RC aufgespielt bekommen,
hier funktionieren manche Dinge nicht mehr von alten ähnlichen Themen, die man im Netz findet...

Danke im Voraus.

Gruß

16.03.2015 - 13:09 Uhr

ok hab es 😃

habe die Bilder in die Ressourcen eingebunden und mit:

        Image kon_bild_1 = Arbeitsvorrat.Properties.Resources.loeschen;
        Image kon_bild_2 = Arbeitsvorrat.Properties.Resources.notiz;
        Image kon_bild_3 = Arbeitsvorrat.Properties.Resources.ordner;

zugewiesen.

Gruß

16.03.2015 - 08:38 Uhr

ha perfekt, scheint zu funktionieren 😃
Danke.

Wenn ich mein Projekt freigebe, in welche Ordner speicher ich die Bilder, dass die mit freigegeben werden?

So habe ich es voll umgesetzt:

  public partial class Arbeitsmaske : Form
    {
        public string menue_text_1 ="Projekt löschen";
        public string menue_text_2 ="Bemerkung anhängen";
        public string menue_text_3 ="Projektordner öffnen";

        Image kon_bild_1 = Bitmap.FromFile("U:\\Programmierung\\arbeitsvorrat\\bilder\\kontextmenue\\loeschen.bmp");
        Image kon_bild_2 = Bitmap.FromFile("U:\\Programmierung\\arbeitsvorrat\\bilder\\kontextmenue\\notiz.bmp");
        Image kon_bild_3 = Bitmap.FromFile("U:\\Programmierung\\arbeitsvorrat\\bilder\\kontextmenue\\ordner.bmp");

        public void kontextmenue_dgv(object sender, MouseEventArgs e)
        {
            kontext_menu.Items.Clear();

            ToolStripMenuItem toolStripItem1 = new ToolStripMenuItem(menue_text_1, kon_bild_1, menueItem_1_Click);
            ToolStripMenuItem toolStripItem2 = new ToolStripMenuItem(menue_text_2, kon_bild_2, menueItem_2_Click);
            ToolStripMenuItem toolStripItem3 = new ToolStripMenuItem(menue_text_3, kon_bild_3, menueItem_3_Click);

            kontext_menu.Items.Add(toolStripItem1);
            kontext_menu.Items.Add(toolStripItem2);
            kontext_menu.Items.Add(toolStripItem3);

            int currentMouseOverRow = dGvexcel.HitTest(e.X, e.Y).RowIndex;
            kontext_menu.Show(dGvexcel, new System.Drawing.Point(e.X, e.Y));
        }
13.03.2015 - 15:12 Uhr

Hallo zusammen,

ich habe ein DGV mit einem Kontextmenü (siehe Anhang rechtsklick_icon.jpg)
Dies habe ich mit folgendem Code realisiert:

namespace Arbeitsvorrat
{
    public partial class Arbeitsmaske : Form
    {
        public string menue_text_1 ="Projekt löschen";
        public string menue_text_2 ="Bemerkung anhängen";
        public string menue_text_3 ="Projektordner öffnen";

        public void kontextmenue_dgv(object sender, MouseEventArgs e)
        {
            ContextMenu m = new ContextMenu();
            m.MenuItems.Add(new System.Windows.Forms.MenuItem(menue_text_1, new EventHandler(menueItem_1_Click)));
            m.MenuItems.Add(new System.Windows.Forms.MenuItem(menue_text_2, new EventHandler(menueItem_2_Click)));
            m.MenuItems.Add(new System.Windows.Forms.MenuItem(menue_text_3, new EventHandler(menueItem_3_Click)));

            int currentMouseOverRow = dGvexcel.HitTest(e.X, e.Y).RowIndex;
                        
            m.Show(dGvexcel, new System.Drawing.Point(e.X, e.Y));

        }

        //Funktion Menüpunkt 1  --> Projekt löschen
        private void menueItem_1_Click(Object Sender, EventArgs e)
        {

            //Benutzerfrage ob löschen oder nicht
            DialogResult AbfrageDGV = MessageBox.Show("Wollen Sie das ausgewählte \nProjekt:\t\t" + dgv_projektnummer_ausles + "\nProjektleiter:\t" + dgv_projektleiter_ausles + "\nwirklich löschen?\n", "Projekt löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (AbfrageDGV == DialogResult.Yes)
            {
                if (verbindung_zu_definitionen.getUsername() == dgv_projektleiter_ausles.ToString() || eingabe_kontrolle.get_check_admin() == true)
                {
                    //Abfrage ob bereits Konstrukteur drin steht.

Die Funktion "kontextmenue_dgv" rufe ich aus meiner Rechtsklick abfrage auf:

           
 private void dGvexcel_MouseDown(object sender, MouseEventArgs e)
        {
 if (e.Button == MouseButtons.Right)
            {
                kontextmenue_dgv(sender, e);
            }//Ende RechtsKlick

Das funktioniert wie ich mir es vorstelle,
nun wollte ich fragen, ob es geht Icons einzufügen, an die Stelle, die im Screenshoot schwarz markiert sind?
Beispiel beim Projekt löschen ein rotes X
Welches Format müssen diese Icons haben?
Wo müssen diese gespeichert sein?

Danke im Voraus.

Gruß

18.08.2014 - 09:59 Uhr

also nachdem ich einen Tip bekommen habe klappt es nun.
Es liegt daran, wie man die "DataGridViewAutoFilterColumnHeaderCell.cs"
integriert hat, entweder über die .dll
oder direkt den Verweis auf die .cs
Hat man die .dll muss das Projekt in der sich die .cs Datei befindet geöffnet werden und dort den gleich folgenden Code einfügen, anschließend das Projekt neu generieren, so dass die Änderungen alles compailiert werden und in der .dll wirksam sind.
Ansonsten muss man die integrierte .cs Datei im Projektmappenexplorer öffnen und den Code einfügen.

Sucht in diese .cs Datei die Stelle an der die Paint funktion aufgerufen wird, und fügt dort die If-Abfrage ein, die nach meinem Kommentar ("//von mir eingefügt um den gefiltertetn hintergrund zu visualisieren") steht :


        /// <summary>
        /// Paints the column header cell, including the drop-down button. 
        /// </summary>
        /// <param name="graphics">The Graphics used to paint the DataGridViewCell.</param>
        /// <param name="clipBounds">A Rectangle that represents the area of the DataGridView that needs to be repainted.</param>
        /// <param name="cellBounds">A Rectangle that contains the bounds of the DataGridViewCell that is being painted.</param>
        /// <param name="rowIndex">The row index of the cell that is being painted.</param>
        /// <param name="cellState">A bitwise combination of DataGridViewElementStates values that specifies the state of the cell.</param>
        /// <param name="value">The data of the DataGridViewCell that is being painted.</param>
        /// <param name="formattedValue">The formatted data of the DataGridViewCell that is being painted.</param>
        /// <param name="errorText">An error message that is associated with the cell.</param>
        /// <param name="cellStyle">A DataGridViewCellStyle that contains formatting and style information about the cell.</param>
        /// <param name="advancedBorderStyle">A DataGridViewAdvancedBorderStyle that contains border styles for the cell that is being painted.</param>
        /// <param name="paintParts">A bitwise combination of the DataGridViewPaintParts values that specifies which parts of the cell need to be painted.</param>
        protected override void Paint(
            Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, 
            int rowIndex, DataGridViewElementStates cellState, 
            object value, object formattedValue, string errorText, 
            DataGridViewCellStyle cellStyle, 
            DataGridViewAdvancedBorderStyle advancedBorderStyle, 
            DataGridViewPaintParts paintParts)
        {
            //von mir eingefügt um den gefiltertetn hintergrund zu visualisieren
            if (this.currentColumnFilter != "")
            {
                cellStyle.BackColor = Color.DimGray;
                cellStyle.ForeColor = Color.White;
            }
            // Use the base method to paint the default appearance. 
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, 
                cellState, value, formattedValue, 
                errorText, cellStyle, advancedBorderStyle, paintParts);

            // Continue only if filtering is enabled and ContentBackground is 
            // part of the paint request. 

Gruß

14.08.2014 - 10:49 Uhr

ok ich habe es hinbekommen mit der spaltenaufteilung,
ich hab in meiner dGvexcel_initialisieren() Methode die Funktion:

 dGvexcel.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

eingebaut, da mir gesagt wurde, dass "AutoSizeColumns" sich nicht auf die vorgegebene Breite meines DGV´s bezeieht, sondern sich auf den Inhalt der Spalten bezieht und jede Spalte so breit wie der längste Eintrag in der Spalte macht.

14.08.2014 - 10:49 Uhr

jetzt noch eine kurze Frage,
wenn ich nun eine Spalte filtere, dann meinetwegen nochmal nach einer filtere
wie kann ich die entsprechende headerzelle oder auch die gefilterte spalte farbig hinterlegen?
Google meinte dass man in der Paint Methode der DGVAutoFilterHeaderCells.cs bearbeiten etwas mit BackColor hinzufügen muss, wenn ich das mache passiert aber nichts, obwohl ich EnableHeadersVisualStyle auf false gesetzt habe.

In die Klasse habe ich eine if schleife eingefügt:

 protected override void Paint(
            Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, 
            int rowIndex, DataGridViewElementStates cellState, 
            object value, object formattedValue, string errorText, 
            DataGridViewCellStyle cellStyle, 
            DataGridViewAdvancedBorderStyle advancedBorderStyle, 
            DataGridViewPaintParts paintParts)
        {
            //von mir eingefügt um den gefiltertetn hintergrund zu visualisieren
            if (this.filtered)
            {
                cellStyle.BackColor = Color.Brown;
            }
            // Use the base method to paint the default appearance.

                base.Paint(graphics, clipBounds, cellBounds, rowIndex,
                    cellState, value, formattedValue,
                    errorText, cellStyle, advancedBorderStyle, paintParts);

Muss ich da aus meiner Form1.cs noch was einfügen
wie das beim einfügen des AutoFilter?

dGvexcel.BindingContextChanged += new EventHandler(dGvexcel_BindingContextChanged);
12.08.2014 - 11:45 Uhr

hallo zusammen,

ich habe es nun geschafft, dass sich das DGV mit dem OLEDB füllen läßt und der Filter geht nun auch.
Meine Füllen Funktion:

        public void dgv_fuellen()
        {
            
            try
            {
                var excelFile = verbindung_zu_definitionen.getPfad();
                var hdr = "Yes";                    //hasHeaders ? "Yes" : "No";
                var binding_excel = new BindingSource();
                string connectionString;
                //Prüfen welches Excel OLEDB geladen werden soll
                if (excelFile.Substring(excelFile.LastIndexOf('.')).ToLower() == ".xlsx")
                    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile +
                                ";Extended Properties=\"Excel 12.0 Macro;HDR=" + hdr + ";IMEX=1\"";
                else
                    connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties=\"Excel 8.0;HDR=" + hdr +
                                    ";IMEX=1\"";

                //Alle Spalten von Tabelle1 lesen
                var adapter = new OleDbDataAdapter("SELECT * FROM [CM$]", connectionString);
                //Verbindung zur Tabelle aufbauen
                var ds = new DataSet();
                //Zu lesende Tabelle angeben
                adapter.Fill(ds, "CM");
                //Tabelle auswählen
                dt_filter = ds.Tables["CM"];
                //Binden da DataGridViewAutoFilter nur mit einem Binding arbeiten
                binding_excel.DataSource = dt_filter;
                //Mit DGV verknüpfen
                dGvexcel.DataSource = binding_excel;//dt_filter;        //Daten mit dem DGV verknüpfen
            }
            catch (Exception fehler_fuellen)
            {
                MessageBox.Show("Die Daten konnten nicht geladen werden, folgendes Problem trat auf:\n" + fehler_fuellen + "\n sollte das Problem weiterhin bestehen, \n" +
                                "wenden sie sich an:\n fheb@de.festo.com", "Datenfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            //nicht benötigte Spalten ausblenden
            dGvexcel.Columns["Angebot"].Visible = false;
            dGvexcel.Columns["Auftrags Nr"].Visible = false;
            dGvexcel.Columns["erledigt"].Visible = false;
            dGvexcel.Columns["Beschreibung"].Visible = false;

            dGvexcel.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

        }//Ende DGV füllen neu

Teile aus meiner Form_Load Funktion:

            //Versuch Excel in Form mit DataGridView und DGVAutoFilter
                dGvexcel.BindingContextChanged += new EventHandler(dGvexcel_BindingContextChanged);

                dGvexcel_initialisieren();
                dgv_fuellen();

Die BindingContextChange Funktion in meine Hauptklasse Form1:


        private void dGvexcel_BindingContextChanged(object sender, EventArgs e)
        {
            if (dGvexcel.DataSource == null) return;

            foreach (DataGridViewColumn col in dGvexcel.Columns)
            {
                col.HeaderCell = new
                    DataGridViewAutoFilterColumnHeaderCell(col.HeaderCell);
            }
            dGvexcel.AutoResizeColumns();
        }

und ganz wichtig war anscheinend die Rückstzefunktion meines DGV´s:

        public void dgvclear()
        {
            var dgvtable = (dGvexcel.DataSource as BindingSource).DataSource as System.Data.DataTable;
            dgvtable.Rows.Clear();
            
            
        }

Jetzt will ich noch versuchen die Spaltenbreite an mein DGV anzupassen, irgendwie geht das mit dem

dGvexcel.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

nicht richtig.
Ah und den Header farbig markieren wenn in dieser Spalte gefiltert wurde...

Vielleicht weiß einer ja noch Rat, ansonsten versuch ich mein Glück und melde mich wieder 😄

Danke nochmal an alle.

Gruß

01.08.2014 - 14:49 Uhr

ok danke TH69
habe es eingefügt, nun ist mir aber aufgefallen,
dass er in der Funktion


        public static DataSet GetExcelDataSet(string excelFile, bool hasHeaders)

nach dem for schleifen einstieg

foreach (DataRow schemaRow in schemaTable.Rows)
                    {
                        var tableName = schemaRow["CM"].ToString();

gar nicht mehr weiter macht, sondern mein UI aufruft und dann kann ich es normal bedienen (wie davor ohne die AutoGrid DropDownbuttons im Header des DGV´s)
Ich geh dem mal auf den Grund und melde mich wieder, falls ich nicht weiter komme.

Ausser es sieht ein Profi auf anhieb 😃

Gruß

01.08.2014 - 14:09 Uhr

Hallo,

also ich komm nicht weiter mit den ganzen bindings und sources.

In meine Form1_Load habe ich versucht die BindingDinger einzufügen:


....
            //Versuch Excel in Form mit DataGridView

                binding_excel = new BindingSource();

                dGvexcel_initialisieren();
                dgv_fuellen();

                
                binding_excel.DataSource = GetExcelDataSet(verbindung_zu_definitionen.getPfad(), true);
                dGvexcel.DataSource = binding_excel;

        }

In die Funktion

dGvexcel_initialisieren();

habe ich den Handler eingebaut:

            dGvexcel.BindingContextChanged += new EventHandler(dGvexcel_BindingContextChanged);

mit diesem sollen ja die DropdownButtons in mein GridView Header reinkommen.

private void dGvexcel_BindingContextChanged(object sender, EventArgs e)
        {
            if (dGvexcel.DataSource == null) return;

            foreach (DataGridViewColumn col in dGvexcel.Columns)
            {
                col.HeaderCell = new
                    DataGridViewAutoFilterColumnHeaderCell(col.HeaderCell);
            }
            dGvexcel.AutoResizeColumns();
        }

Meine GetDataSet Methode habe ich versucht nach deinem Tip (vbprogger) mit dem OLEDB

die sieht dann so aus:

 public static DataSet GetExcelDataSet(string excelFile, bool hasHeaders)
        {
            var hdr = hasHeaders ? "Yes" : "No";
            string strConn;
            if (excelFile.Substring(excelFile.LastIndexOf('.')).ToLower() == ".xlsx")
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile +
                          ";Extended Properties=\"Excel 12.0 Macro;HDR=" + hdr + ";IMEX=1\"";
            else
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties=\"Excel 8.0;HDR=" + hdr +
                          ";IMEX=1\"";

            var output = new DataSet();

            using (var conn = new OleDbConnection(strConn))
            {
                conn.Open();

                var schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                if (schemaTable != null)
                    foreach (DataRow schemaRow in schemaTable.Rows)
                    {
                        var tableName = schemaRow["CM"].ToString();

                        if (tableName.LastIndexOf("'", StringComparison.Ordinal) < tableName.Length - 1)
                            continue;
                        try
                        {
                            var cmd = new OleDbCommand("SELECT * FROM [" + tableName + "]", conn) { CommandType = CommandType.Text };
                            var outputTable = new System.Data.DataTable(tableName);
                            new OleDbDataAdapter(cmd).Fill(outputTable);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message + "Sheet:" + tableName + ".File:" + excelFile, ex);
                        }
                    }

                conn.Close();
            }
            return output;
        }

Irgendwie will das alles nicht so wie es sein soll.
Und so einfach wie es in den Foren steht ist das auch nicht...

vlt. kann mir einer noch n Tip geben ...

Danke.

Gruß

25.07.2014 - 12:37 Uhr

ja gut in der Funktion les ich nur, aber in einem anderen Teil des programms schreibe ich auch oder ändere die formatierung.

mh ok
dann versuch ich das mal irgendwie zu handhaben,
von dem DataTable und DataSet hab ich auch noch nie was gehört 🤔
(ja bin noch blutiger Anfänger 🙁 )

danke dir aber schon mal ...

25.07.2014 - 11:49 Uhr

😃
kenn ich irgendwoher (bin auch lesefaul)

ok des mit dem OLEDB kenn ich gar nicht, jetzt will ich erst versuchen das auf die herkömmliche art zu machen
hier der Code in Kurzform 😃

-excel öffnen
-excel zeile für zeile in Variable einlesen
-Variable Zeile für Zeile ins dGvexcel mit .Rows.Add

und wie kann ich jetzt diese Daten zuordnen?

binding_excel.DataSource = ????;

oder brauch ich das nicht mehr, da ja eigtentlich mein DGV gefüllt ist?

25.07.2014 - 10:33 Uhr

heißt des, dass ich meine separate Funktion

dgv_fuelle()

wegfallen lassen kann?
(ausschnitt aus der Funktion)

public void dgv_fuellen()
        {

            dgverledigt = 0;
            dgvzeile = 6;
            do
            {
                Microsoft.Office.Interop.Excel.Application dgvxlapp = new Microsoft.Office.Interop.Excel.Application();
                dgvxlapp.Visible = false;
                Workbook dgvwb;
                object missing = System.Reflection.Missing.Value;

                try
                {

                    System.Threading.Thread.Sleep(300); //Kurze Wartetimer

                    dgvwb = dgvxlapp.Workbooks.Open(
                                                verbindung_zu_definitionen.getPfad(),
                                                ExcelKonstanten.UpdateLinks.DontUpdate,
                                                ExcelKonstanten.ReadWrite,
                                                ExcelKonstanten.Format.Nothing,
                                                "", // Passwort
                                                "", // WriteResPasswort
                                                ExcelKonstanten.IgnoreReadOnlyRecommended,
                                                Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                                "", // Trennzeichen
                                                ExcelKonstanten.Editable,
                                                ExcelKonstanten.Notify,
                                                ExcelKonstanten.Converter.Default,
                                                ExcelKonstanten.DontAddToMru,
                                                ExcelKonstanten.Local,
                                                ExcelKonstanten.CorruptLoad.NormalLoad
                                              );

                    // Arbeitsblätter lesen
                    Sheets sheets = dgvwb.Worksheets;
                    // ein Arbeitsblatt auswählen…
                    Worksheet dgvws = (Worksheet)sheets.get_Item("CM");
                    //erste leere Zeile suchen
                    do
                    {
                        object dgvwertzelle = dgvxlapp.Cells[dgvzeile, spalte_excel_erledigt].Value2;                      //erldigt feld
                        string wert_projektnummer = dgvxlapp.Cells[dgvzeile, spalte_excel_Projektnummer].Value.ToString();       //Typumwandlung, da sonst Fehler beim sortieren 
                        object wert_auftrag = dgvxlapp.Cells[dgvzeile, spalte_excel_Auftrag].Value2;
                        object wert_prio = dgvxlapp.Cells[dgvzeile, spalte_excel_Prio].Value2;
                        object wert_team = dgvxlapp.Cells[dgvzeile, spalte_excel_Team].Value2;
                        object wert_zusatz = dgvxlapp.Cells[dgvzeile, spalte_excel_Zusatz].Value2;
                        object wert_teilenummer = dgvxlapp.Cells[dgvzeile, spalte_excel_TnAnlage].Value2;
                        object wert_eingelastet = dgvxlapp.Cells[dgvzeile, spalte_excel_Eingelastet].Value2;                   //Fehler mit Datum
                        object wert_zieltermin = dgvxlapp.Cells[dgvzeile, spalte_excel_Zieltermin].Value2;
                        object wert_konstrukteur = dgvxlapp.Cells[dgvzeile, spalte_excel_Konstrukteur].Value2;
                        object wert_projektleiter = dgvxlapp.Cells[dgvzeile, spalte_excel_Projektleiter].Value2;

                        //wert_zieltermin = wert_zieltermin.ToString();//typeof(DateTime);
                        wert_eingelastet = Convert.ToDateTime(wert_eingelastet);
                        wert_zieltermin = Convert.ToDateTime(wert_zieltermin);

                        if (dgvwertzelle != null)
                        {
                            dgverledigt = dgverledigt + 1;
                        }
                        else
                        {
                            dGvexcel.Rows.Add(wert_projektnummer,wert_auftrag, wert_prio, wert_team,wert_zusatz,wert_teilenummer, wert_eingelastet,wert_zieltermin, wert_konstrukteur, wert_projektleiter);
                        }
                        lbl_zeile.Text = Convert.ToString(dgvzeile - dgverledigt - 5);
                        dgvzeile = dgvzeile + 1;
                        binding_excel.DataSource = dgvws;

                    } while (dgvws.Cells[dgvzeile, 1].Value != null);

                    
                    dgvwb.Close(true, missing, false);       //Workbook schließen & speichern
                    dgvxlapp.Quit();                         //Excel beenden
                    System.Threading.Thread.Sleep(300);   //Kurze Wartetimer

                    dgvexcelfehler = 0;

                }

In meiner Form_load habe ich nun ein

 binding_excel = new BindingSource();

in dem Excelaufruf habe ich das binding drin,
aber irgendwie kommt mir das falsch vor.... 😦

25.07.2014 - 08:44 Uhr

ja da war ich schon drauf,
und ich blick gerade hauptsächlich die Funktion

// Add this code to the form Load event handler.
  dataGridView1.DataSource = customersBindingSource;

umgeschrieben hab ich des dann so:

dGvexcel.DataSource = customersBindingSource;

aber wo hole ich mein bindingsource etc.?

da häng ich gerade bzw. blicke es nicht... 😦

25.07.2014 - 08:17 Uhr

in dem Bild sieht man die Fehlermeldung
und wie die Dropdownpfeile angezeigt werden (so wie ich mir das vorstelle)

24.07.2014 - 15:13 Uhr

Hallo zusammen,

ich habe eine Windowsform [Arbeitsmaske]
in dieser Form habe ich ein DataGridView [dGvexcel]

in meiner Funktion

Form1_Load

rufe ich meine Funktion

dGvexcel_initialisieren();

auf
in dieser setze ich Parameter wie:

 dGvexcel.ColumnCount = 10;
            dGvexcel.ColumnHeadersVisible = true;

            // Set the column header style.
            DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();

            columnHeaderStyle.BackColor = Color.Beige;
            columnHeaderStyle.Font = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
            dGvexcel.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
            
            // Spalten hinzufügen
            dGvexcel.Columns[0].Name = "Projektnummer";
            dGvexcel.Columns[1].Name = "Auftrag";
            dGvexcel.Columns[2].Name = "Priorität";
            dGvexcel.Columns[3].Name = "Team";
            dGvexcel.Columns[4].Name = "Zusatz";

anschließend rufe ich meine Funktion

dgv_fuellen();

auf
in dieser füttere ich das DGV mit Daten aus einer Excelliste. (das funktioniert auch perfekt)

Nun habe ich das DataGridViewAutoFilter entdeckt und mir hierzu auch die MS Seite angeschaut,
allerdings blicke ich es gerade nicht, wo ich was einsetzen soll.

Wenn ich diese Funktion

foreach (DataGridViewColumn col in dGvexcel.Columns)
            {
               col.HeaderCell = new DataGridViewAutoFilterColumnHeaderCell(col.HeaderCell);
            }

in meine

dGvexel_initialisieren();

setze
sehe ich zwar die dropdown Pfeile in jeder Spalte, aber sobald ich draufklicke kommt ein Fehler mit den Funktionen DataSource und DataBinding,
bei denen ich nicht blicke, wo ich die reinsetzen muss...

Vielleicht kann mir einer weiterhelfen.

Danke im Voraus.
Gruß

05.06.2014 - 14:49 Uhr

ok ich hab eine Lösung gefunden, ohne die API´s
(habe da im moment nicht die Zeit mich in diese einzuarbeiten...)

meine "Arguments" Zeile habe ich mit einem ";" zwischen gesamtprojektnummer und werkfeld bereichert und nun geht es:

compiler.StartInfo.Arguments = "/INI_FILE=\\\\xyz.de\\server\\int\\Application\\SAP\\de_SAP_PROD_SNC.INI /system=P02 /language=DE /client=001 /user=" + verbindung_zu_definitionen.getUsername() + " /command=" + transaktion + " " + sapfeld + "=" + gesamtprojektnummer +";" + werkfeld + "=" + werkzahl;

Falls jemand von euch mir eine gute Seite empfehlen kann, wo SAP .net oder die anderen Connectors
einfach erklärt werden, wäre ich euch dankbar 😃

Gruß

05.06.2014 - 10:41 Uhr

Mh ok, die beiden Sachen kenn ich nicht 😦

und mit diesem Shell bekommt man das nicht hin?

05.06.2014 - 10:21 Uhr

Hallo zusammen,

ich will über einen Button eine SAP Transaktion aufrufen, und in deren Maske zwei Variabel eingeben.
Im Sap selbst habe ich mir die DynproFeldnamen geholt.
Das ganze versuche ich nach Tip eines Kollegen über die UseSchellEigenschaft.

Es funktioniert auch soweit, dass die Transaktion aufgerufen wird,
und eine Variable in dem gewünschten Feld landet.
Die Zweite Variable bekomme ich aber nicht rein 😦
Weiß einer hier Rat?

Hier der Code um die Transaktion aufzurufen:

           //SAP Laden
        public void sap_laden(string transaktion, string sapfeld, string gesamtprojektnummer)
        {
            string sap32bit_pfad = @"C:\Program Files\SAP\FrontEnd\SAPgui\sapshcut.exe";
            string sap64bit_pfad = @"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapshcut.exe";
            string sap_pfad = "";
            string werkfeld="P_WERKS";
            string werkzahl="0017";

            //Prüfen auf 32 oder 64 Bit System
            if (Environment.Is64BitOperatingSystem)
            {
                sap_pfad = sap64bit_pfad;
            }
            else
            {
                sap_pfad = sap32bit_pfad;
            }

            Process compiler = new Process();
            compiler.StartInfo.FileName = sap_pfad;
            compiler.StartInfo.Arguments = "/INI_FILE=\\\\xyz.de\\server\\int\\Application\\SAP\\de_SAP_PROD_SNC.INI /system=P02 /language=DE /client=001 /user=" + verbindung_zu_definitionen.getUsername() + " /command=" + transaktion + " " + sapfeld + "=" + gesamtprojektnummer;// +" " + werkfeld + "=" + werkzahl;     
            compiler.StartInfo.UseShellExecute = false;
            compiler.StartInfo.RedirectStandardOutput = true;
            compiler.Start();
            compiler.WaitForExit();
        }

Das auskommentierte bekomme ich nicht unter.
Wo liegt der Fehler beim füllen des zweiten Feldes?
Kann ich das "werkfeld" separat mit "werkzahl" befüllen?

Danke im Voraus

Gruß

01.04.2014 - 14:35 Uhr

so kurzes Zwischenergebnis, nach ein paar Fehlermeldungen mit 0x80004005 habe ich nun folgenden Code um ein tif zu öffnen, es zu "stempeln" und unter selben Namen abzuspeichern:

public void bildstempel()
        {
            string strText = verb_zu_def.get_dauertext();
            string neuerPfad = verb_zu_def.get_pfad();
            Font font = new Font("Arial", 72, FontStyle.Bold | FontStyle.Underline);
            
            //Datei öffnen  
            Stream bildstream = new FileStream(neuerPfad, FileMode.Open, FileAccess.Read, FileShare.Read);
            Bitmap bildwandel2 = new Bitmap(bildstream);


            //erstellt aus geöffneter Datei eine Grafik
            Graphics grafik = Graphics.FromImage(bildwandel2);      

            //Zeichnen Funktionen
            grafik.DrawImage(bildwandel2, 0, 0);
            grafik.DrawString(strText, font, Brushes.Red, new Point(150, 150));

            //clonen um "Schreibschutz" zu vermeiden
            Bitmap bildwandel = bildwandel2.Clone(new Rectangle(0, 0, bildwandel2.Width, bildwandel2.Height), PixelFormat.Format64bppPArgb);
            bildwandel2.Dispose();
            bildstream.Close();

            //Speichern
            try
            {
                
                bildwandel.Save(neuerPfad, ImageFormat.Tiff);
            }
            catch (Exception speicherfehler)
            {
                MessageBox.Show("Fehler:\n" + speicherfehler, "Fehler beim speichern", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //leeren - schließen
                bildwandel.Dispose();
            }

            //leeren - schließen
            bildwandel.Dispose();

        }

Nun will ich versuchen, dass der Benutzer ein Verzeichnis auswählt, und alle .tif Dateien in diesem Verzeichnis bekommen den Stempel.

Falls ich nicht weiterkomme melde ich mich 😃

Gruß Edzio

18.03.2014 - 10:53 Uhr

Hallo ihr beiden,

danke für die schnelle Antworten,
ich werde euren Tips folgen.

Habe nur mit "tif stempeln" gesucht

Gruß Edzio

18.03.2014 - 10:27 Uhr

Hallo zusammen,

ich habe eine Benutzeroberfläche, in der ich gerne einen Pfad auswählen will, in welchem mehrer
.tif Dateien enthalten sind.
Diese .tif Dateien sollen mit einem Text, den der Benutzer eingibt, quasi "gestempelt" werden, und
anschließend wieder abgespeichert werden (egal ob unter gleichem namen oder neu_datei1.tif
neu_datei2.tif)...
Wie kann ich das realisieren?

Mit

            string strText = eingabetext.ToString();
            Font font = new Font("Arial", 12, FontStyle.Bold | FontStyle.Underline);
            Graphics graph = this.CreateGraphics();
            graph.DrawImage(img, 0, 0);
            graph.DrawString(strText, font, Brushes.Red, new Point(50, 50));

befindet sich das ja nur als "Hintergrundbild" auf meiner Benutzeroberfläche,
abspeichern geht hier auch nicht.

Kann mir da wer helfen?

Danke im Voraus.

Gruß Edzio

28.02.2014 - 13:34 Uhr

Hallo zusammen,

mittlerweile habe ich eine funktionierende Lösung gefunden:


       //Konstrukteur Abhaken Funktion
        public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {


            //Excel 1 aufrufen Zeile suchen und kopieren.

//--------------------------------------
                Range ran1 = (Range)excel_konstrukteur_abhaken_ws.Rows[zeile];
                ran1.Select();
                ran1.Copy(Missing.Value);

                excel_kopier_archiv();	//Einfügenfunktion aufrufen
//--------------------------------------

            //Excel 1 beenden und Zwischenablage leeren

        }//Ende Excel Konstrukteur abhaken




        //Abgehaktes Projekt in Archive liste_archiv.xlsx
        public void excel_kopier_archiv()
        {
            //Excel 2 aufrufen Zeile suchen und einfügen.
//--------------------------------------
               Range ran = (Range)excel_kopier_archive_ws.Cells[archive_zeile, 1]; 
			   ran.PasteSpecial(XlPasteType.xlPasteValues,
								XlPasteSpecialOperation.xlPasteSpecialOperationNone,
								Missing.Value,
								Missing.Value);
//--------------------------------------

            //Excel 2 beenden

        }

Bei der Einfügenmethode war es wichtig nur die erste Zelle in der gewünschten Zeile zu wählen,
nicht den Bereich.

Gruß Edzio

12.02.2014 - 13:56 Uhr

Hallo nochmal,

ich habe weiter rumprobiert,
und habe es nun soweit geschafft, dass ich in der ersten Exceldatei meine komplette Zeile markieren kann,
und diese dann komplett in die zweite Exceldatei einfügen kann.

Nun habe ich aber das Problem mit der Meldung:
"Die Daten in der Zwischenablage sind in Größe und Form mit dem markierten Bereich nicht identisch.
Sollen die Daten trotzdem eingefügt werden?"

Kann ich die autmatisch mit ok bestätigen, bzw. wie kann ich Größe und Form mitkopieren und einfügen?

Hier noch die Schnipsel von meiner Kopier/Einfügenfunktion:

       //Konstrukteur Abhaken Funktion
        public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {
           

            //Excel 1 aufrufen Zeile suchen und kopieren.

//--------------------------------------
                Range ran1 = (Range)excel_konstrukteur_abhaken_ws.Rows[zeile];
                ran1.Select();
                ran1.Copy(Type.Missing);

                excel_kopier_archiv();
//--------------------------------------

			//Excel 1 beenden und Zwischenablage leeren

        }//Ende Excel Konstrukteur abhaken

		
		

        //Abgehaktes Projekt in Archive liste_archiv.xlsx
        public void excel_kopier_archiv()
        {
            //Excel 2 aufrufen Zeile suchen und einfügen.
//--------------------------------------
                Range ran = (Range)excel_kopier_archive_ws.Rows[zeile];
                ran.Select();
                excel_kopier_archive_ws.Paste(ran);      //Meldung wegbekommen Rest geht
//--------------------------------------

			//Excel 2 beenden

        }
10.02.2014 - 07:17 Uhr

Hi Taipi,

nein nach dem kopieren rufe ich meine Funktion
(excel_kopier_archive();) auf, in der ich das andere ExcelSheet aufmache und dort dann den Inhalt reinkopieren will, nach der Funktion lösche ich es erst wieder.
Wenn ich Step by Step in die Funktion reingehe, ist der Inhalt auch im Speicher und ich kann ihn manull irgenwo reinkopieren mit STRG+V, aber mit dem Code kommt diese Fehlermeldung...

Das habe ich auch schon versucht, mit dem Makroaufzeichnen, aber ohne Erfolg.

Gruß

07.02.2014 - 12:44 Uhr

Hallo zusammen,

ich komm einfach nicht weiter, laut google und anderen Suchmaschinen, kann man in einer Exceldatei
eine Zeile ganz normal kopieren mit .Copy()
und in eine andere Exceldatei mit .Paste Speciel(...) einfügen,
das habe ich versucht, aber es geht nicht.

Führe ich den code bis zur "einfügen Methode" aus, habe ich die kopierte Zeile in der Zwischenablage, und kann die auch ins Excel kopieren.
Das mit dem SpecialPaste() geht aber nicht, da bringt er den Fehler, welchen ich nicht verstehe (siehe Anhang).

Kann mir hier jemand weiterhelfen?

Danke.

Gruß Edzio

hier noch die beiden Funktionen,
in der ersten excel_konstrukteur_abhaken() rufe ich die eine Excelliste auf, kopiere die ausgezählte Zeile und rufe die zweite Funktion excel_kopier_archive() auf, in der ich die andere Excelliste aufrufe und die kopierte Zeile
an das Ende einfügen will.

public void excel_konstrukteur_abhaken(object konstrukteur_projektnummer_abhaken)
        {
           

            Microsoft.Office.Interop.Excel.Application excel_konstrukteur_abhaken_xlapp = new Microsoft.Office.Interop.Excel.Application();
            excel_konstrukteur_abhaken_xlapp.Visible = false;
            Workbook excel_konstrukteur_abhaken_wb;
            object missing = System.Reflection.Missing.Value;

            try
            {
                zeile = 5;

                System.Threading.Thread.Sleep(300); //Kurze Wartetimer

                excel_konstrukteur_abhaken_wb = excel_konstrukteur_abhaken_xlapp.Workbooks.Open(
                                            verbindung_zu_definitionen.getPfad(),
                                            ExcelKonstanten.UpdateLinks.DontUpdate,
                                            ExcelKonstanten.ReadWrite,
                                            ExcelKonstanten.Format.Nothing,
                                            "", // Passwort
                                            "", // WriteResPasswort
                                            ExcelKonstanten.IgnoreReadOnlyRecommended,
                                            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                            "", // Trennzeichen
                                            ExcelKonstanten.Editable,
                                            ExcelKonstanten.Notify,
                                            ExcelKonstanten.Converter.Default,
                                            ExcelKonstanten.DontAddToMru,
                                            ExcelKonstanten.Local,
                                            ExcelKonstanten.CorruptLoad.NormalLoad
                                          );

                // Arbeitsblätter lesen
                Sheets sheets = excel_konstrukteur_abhaken_wb.Worksheets;
                // ein Arbeitsblatt auswählen…
                Worksheet excel_konstrukteur_abhaken_ws = (Worksheet)sheets.get_Item("CM");

                //Projektnummer suchen
                do
                {
                    zeile = zeile + 1;
                    if (excel_konstrukteur_abhaken_ws.Cells[zeile, spalte_excel_Projektnummer].Value.ToString() == "")
                    {
                        break;                                                      
                    }
                } while (excel_konstrukteur_abhaken_ws.Cells[zeile, spalte_excel_Projektnummer].Value.ToString() != konstrukteur_projektnummer_abhaken.ToString());

                //Konstrukteur abhaken im Excel
                excel_konstrukteur_abhaken_xlapp.Cells[zeile, spalte_excel_erledigt] = "x";        
//Zeile kopieren und Archivfunktion aufrufen
                excel_konstrukteur_abhaken_xlapp.Rows[zeile].Copy();
                excel_kopier_archive();

                excel_konstrukteur_abhaken_xlapp.Rows[zeile].Delete();
                Clipboard.Clear();  //Zwischenablage leeren

                excel_konstrukteur_abhaken_wb.Close(true, missing, false);        //Workbook schließen & speichern
                excel_konstrukteur_abhaken_xlapp.Quit();                          //Excel beenden
                System.Threading.Thread.Sleep(300);                       		  //Kurze Wartetimer


            }
            catch (Exception exc)
            {
                DialogResult AbfrageExcel = MessageBox.Show("Fehler beim Schreiben!\n\n" + exc + "\n\n" +
                                                            "(Sollte der Fehler häufiger vorkommen, wenden Sie sich an\n...)", "Löschen fehlgeschlagen!!",
                                                            MessageBoxButtons.OK,
                                                            MessageBoxIcon.Error);
                excel_konstrukteur_abhaken_xlapp.Quit();                         //Excel beenden

            }

            dgvclear();                                    //DGV aktualisieren
            dgv_fuellen();
            MessageBox.Show("Projekt abgehakt!", "Projekt", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }//Ende Excel Konstrukteur abhaken


        //Abgehaktes Projekt in Archive liste_archive.xlsx
        public void excel_kopier_archive()
        {
            Microsoft.Office.Interop.Excel.Application excel_kopier_archive_xlapp = new Microsoft.Office.Interop.Excel.Application();
            excel_kopier_archive_xlapp.Visible = false;
            Workbook excel_kopier_archive_wb;
            object missing = System.Reflection.Missing.Value;

            try
            {
                zeile = 5;

                System.Threading.Thread.Sleep(300); //Kurze Wartetimer

                excel_kopier_archive_wb = excel_kopier_archive_xlapp.Workbooks.Open(
                                            verbindung_zu_definitionen.getPfad_Archive(),
                                            ExcelKonstanten.UpdateLinks.DontUpdate,
                                            ExcelKonstanten.ReadWrite,
                                            ExcelKonstanten.Format.Nothing,
                                            "", // Passwort
                                            "", // WriteResPasswort
                                            ExcelKonstanten.IgnoreReadOnlyRecommended,
                                            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                            "", // Trennzeichen
                                            ExcelKonstanten.Editable,
                                            ExcelKonstanten.Notify,
                                            ExcelKonstanten.Converter.Default,
                                            ExcelKonstanten.DontAddToMru,
                                            ExcelKonstanten.Local,
                                            ExcelKonstanten.CorruptLoad.NormalLoad
                                          );

                // Arbeitsblätter lesen
                Sheets sheets = excel_kopier_archive_wb.Worksheets;
                // ein Arbeitsblatt auswählen…
                Worksheet excel_kopier_archive_ws = (Worksheet)sheets.get_Item("CM");

                //Leer Zeile suchen
                do
                {
                    zeile = zeile + 1;

                } while (excel_kopier_archive_ws.Cells[zeile, spalte_excel_Projektnummer].Value != null);

                //einfügen der ausgeschnittenen Zeile
               
                excel_kopier_archive_xlapp.Rows[zeile].PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);

                excel_kopier_archive_wb.Close(true, missing, false);        //Workbook schließen & speichern
                excel_kopier_archive_xlapp.Quit();                          //Excel beenden
                System.Threading.Thread.Sleep(300);                       		  //Kurze Wartetimer


            }
            catch (Exception exc)
            {
                DialogResult AbfrageExcel = MessageBox.Show("Fehler beim einfügen ins Archive!\n\n" + exc + "\n\n" +
                                                            "(Sollte der Fehler häufiger vorkommen, wenden Sie sich an\n...)", "Archivieren fehlgeschlagen!!",
                                                            MessageBoxButtons.OK,
                                                            MessageBoxIcon.Error);
                excel_kopier_archive_xlapp.Quit();                         //Excel beenden

            }
        }
11.12.2013 - 15:09 Uhr

Hallo Tefla,

Danke, durch deinen Hinweis habe ich nun nicht
CellMousDown
DataGridViewCellMouseEventArgs
verwendet, sondern nur
MouseDown
MouseEventArgs

jetzt scheint es zu funktionieren.

Sry wenn ich ab und zu so blöd nachfrage,
aber manchmal ist man einfach vor lauter Buchstaben blind 😦

Danke

Gruß Edzio

11.12.2013 - 14:07 Uhr

Hallo zusammen,

mal wieder ein Problem, wo ich entweder im Moment zu blind bin oder es einfach nicht so geht...

Ich habe ein DataGridView,
per LinksClick markiert sich ja wunderbar die Zeile und man kann das Clickevent ausführen.

Nun will ich aber mit Hilfe des Mous Events eine Funktion ausführen lassen wenn man Links klickt und
eine andere Funktion, wenn man rechtsklickt.
Die Idee nach Google und Co:

        private void dGvexcel_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {

 		DataGridView.HitTestInfo mausposition = dGvexcel.HitTest(e.X, e.Y);
                dGvexcel.CurrentCell = dGvexcel.Rows[mausposition.RowIndex].Cells[mausposition.ColumnIndex];
                dGvexcel.CurrentCell.Selected = true;
                dgv_index_ausles = dGvexcel.CurrentCell.RowIndex;



            
            //-------LINKSKLICK
            if (e.Button == MouseButtons.Left)
            {
                
            }
            //-------RECHTSKLICK
            if (e.Button == MouseButtons.Right)
            {
                               
            }

        }

Aber irgendwie bekomme ich keine Zeile im DGV ausgewählt, da irgendwoher ein -Wert in die Koordinaten geschrieben wird.

Was ist falsch?

Danke im Voraus.

Gruß

09.12.2013 - 11:19 Uhr

Hallo zusammen,

mit dem String.IsNullOrEmpty(inputbox)
funktioniert das Abbrechen,
allerdings ist das Problem, das herbivore beschrieben hat der Fall.
Dann such ich mir mal eine gute Inputbox, und versuch die einzubauen.

Gruß

06.12.2013 - 15:38 Uhr

Hallo ihr beiden,

schon mal danke für die rasche Antworten.

@Jamikus
ich glaub das ist die Methode.

werde es prüfen und mich wieder melden.

Die Methode von Coffeebean werde ich mir auch genauer anschauen.

Gruß