Laden...
R
ronny75 myCSharp.de - Member
Softwareentwickler Niedersachsen Dabei seit 07.07.2009 69 Beiträge
Benutzerbeschreibung

Forenbeiträge von ronny75 Ingesamt 69 Beiträge

03.12.2018 - 10:22 Uhr

Hallo Abt,

Vielen Dank für den Hinweis.

Leider bekomme ich die Meldung:

{"Die HTTP-Anforderung ist beim Clientauthentifizierungsschema \"Anonymous\" nicht autorisiert. Vom Server wurde der Authentifizierungsheader \"Basic realm=\"Default Realm\"\" empfangen

Ich hatte den Code nach deinem Hinweis folgendermaßen erweitert:


  System.ServiceModel.BasicHttpBinding b = new BasicHttpBinding();
                b.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
                currentClient = new PartnerVerwaltungServiceClient(b, new EndpointAddress(url));
                currentClient.ClientCredentials.UserName.Password = Passwort;
                currentClient.ClientCredentials.UserName.UserName = Username;
                // Testaufruf für die Prüfung ob Verbindung mit ClientCredentials hergestellt werden kann.
                currentClient.Open();
                currentClient.firmenkundeLesen(null);

Was mache ich nur falsch?

VG

Ron

30.11.2018 - 16:43 Uhr

Hallo zusammen,

irgendwie gehen mir die Ideen aus..:(

mit dem Code:


            try
            {
                currentClient = new PartnerVerwaltungServiceClient();
                currentClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);

                currentClient.ClientCredentials.UserName.Password = Passwort;
                currentClient.ClientCredentials.UserName.UserName = Username;

                // Testaufruf für die Prüfung ob Verbindung mit ClientCredentials hergestellt werden kann.
                currentClient.Open();


                using (var scope = new OperationContextScope(currentClient.InnerChannel))
                {
                    // Create a custom soap header
                    var msgHeader1 = MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "");
                    var msgHeader2 = MessageHeader.CreateHeader("UsernameToken", "", "");
                    var msgHeader3 = MessageHeader.CreateHeader("Username", "", "047686");
                    // Add the header into request message
                    OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader1);
                    OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader2);
                    OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader3);

                    var res = currentClient.firmenkundeLesen(null);
                }

Versuche ich folgende Header Infos hinzu bekommen...


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>die Personalnummer</wsse:Username>
</wsse:UsernameToken>
</wsse:Security>
</s:Header>
            <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <firmenkundeLesen xmlns="http://partnerverwaltungservice.ws.hdi.de/service"/>
            </s:Body>
</s:Envelope>

Leider klappt es nicht.

Weiß jemand wie man da ran gehen könnte?

VG

Ron

04.05.2018 - 16:29 Uhr

Hallo,

es scheinen User und/oder Passwort nicht zu stimmen....

Fehlermeldung:> Fehlermeldung:

System.ServiceModel.Security.MessageSecurityException: Die HTTP-Anforderung ist beim Clientauthentifizierungsschema "Basic" nicht autorisiert.Vom Server wurde der Authentifizierungsheader "Basic realm="ZVS Security Realm"" empfangen. ---> System.Net.WebException Der Remoteserver hat einen Fehler zurückgegeben: (401) Nicht autorisiert.

Gruß Ron

02.05.2018 - 11:05 Uhr

Hallo,

Habe mal ein Beispiel, wie es bei mir funktioniert...

in der app.config der Solution:


<basicHttpBinding>
        <binding name="PartnerVerwaltungServicePortBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="10000000" maxBufferPoolSize="524288" maxReceivedMessageSize="10000000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>

Natürlich entsprechend angepasst...

Im Code:


            currentClient = new PartnerVerwaltungServiceSEIClient();
            currentClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);

            currentClient.ClientCredentials.UserName.Password = Passwort;
            currentClient.ClientCredentials.UserName.UserName = Username;

            try
            {
                // Testaufruf für die Prüfung ob Verbindung mit ClientCredentials hergestellt werden kann.
                currentClient.Open();
                currentClient.firmenkundeLesen(null);
            }
            catch (Exception ex)
            {

                if (ex.Message.Contains("NullPointerException"))
                {
                    // Verbindung war erfolgreich
                    return true;
                }
                else
                {
                    // Verbindung war nicht erfolgreich
                    MyException = ex;
                    return false;
                }
            }

18.04.2018 - 16:39 Uhr

Hi,

vielleicht CodePage Problem....

Gruß

Ron

22.03.2018 - 12:56 Uhr

Hallo,

Levenshtein-Distanz.....

In der Praxis wird die Levenshtein-Distanz zur Bestimmung der Ähnlichkeit von Zeichenketten angewandt.

https://de.wikipedia.org/wiki/Levenshtein-Distanz

Muss dann mit einem Programm geprüft werden....

Gruß

Ron

12.11.2015 - 11:34 Uhr

Hallo,

ich habe für diese Fälle immer eine Klassenbibliothek, die in verschiedene Solutions als zusätzliches Projekt eingebunden wird.

Quellcodeverwaltung: SVN
Client: ankhsvn

VG

ronny75

21.05.2014 - 10:54 Uhr

Hi,

das wird sicher sehr ungenau....besser über einen Webservice geocodieren lassen.

Vielleicht hilft dir der Link weiter: http://open.mapquestapi.com/geocoding/

Gruß

Rony

10.07.2013 - 11:15 Uhr

Hallo zusammen,

ich habe ein C#-Projekt, das ein Excel-Template füllt und dann abspeichert. Dieses Projekt wird auf verschiedenen Servern betrieben. Wenn ein User noch kein Excel oder Office-Produkt gestartet hat, wird beim Aufruf der Funktion Excel nachinstalliert (Prapairing to Install...). Da meine Funktion davon ausgeht, dass Excel schon vollständig geladen ist, bricht sie ab, da sie nicht auf das Nachladen wartet.
Ist Excel etc. schon mal gestartet worden, funktioniert die Funktion reibungslos.

Meine Frage: Wie kann ich feststellen, ob Excel vefügbar ist oder wie kann ich auf Abschluss dieses Prepairing to install Prozess warten?

Über Denkanstöße wäre ich sehr dankbar...

Gruß Ron

26.06.2013 - 18:55 Uhr

Hi,

zu Punkt 1: Wir speichern Verbindungszeichenfolgen für die Datenbanken in einem XML-File. Dieses wird verschlüsselt und von der Anwendung eingelesen und entschlüsselt.

zu Punkt2: Wir lesen die Windows-Kennung aus (Environment...), wenn sich der User in unseren Firmennetz anmelden konnte und in der DB mit Namen oder Personalnummer bekannt ist, kann er die Anwendung nutzen.

zu Punkt 3: Wir haben ein Rollenbasiertes System. Eine Rolle hat zuordbare Rechte und einem User oder einer (AD)Gruppe können eine oder mehrere Rollen zugeordnet werden. Wird die Anwendung gestartet, lesen wir die Rollen des angemeldten Users und somit seine Rechte in einen Singleton. In der Anwendung fragen wir bei bestimmten Punkten, ob im Singleton das entsprechende Recht geladen ist. Ist dies der Fall, kann er die Funktion nutzen.

Hoffe Dir damit ein paar brauchbare Hinweise gegeben zu haben.

Gruß Ron

25.01.2013 - 15:37 Uhr

Hi,

um die Sache zu beschleunigen, würde ich die Tabellen über ein View verknüpfen und dann den View auslesen, damit sparst du Selects auf die DB, die Zeit kosten.

Gruß Ron

14.05.2012 - 18:14 Uhr

Hi,

vielleicht kannst du es so programmmieren....


public abstract class TypeConverter<T>
    {
        public T TargetType { get; set; }

        public abstract bool CanConvertFrom(string context);

        public abstract T ConvertFrom(string context);

    }


public class DateTypeConverter<T>: TypeConverter<T>
    {

        public override bool CanConvertFrom(string context)
        {
            throw new NotImplementedException();
        }

        public override T ConvertFrom(string context)
        {
            throw new NotImplementedException();
        }
    }

und die Verarbeitung....


List<TypeConverter<object>> typeConverterList = new List<TypeConverter<object>>();
TypeConverter<object> t = new DateTypeConverter<object>();
typeConverterList.Add(t);

Gruß Ron

19.09.2011 - 18:10 Uhr

Hi,

vielleicht hilft dir das wieter:


dgv.AutoGenerateColumns = false;

und dann die Definition der anzuzeigenden Spalten:


/// <summary>
        /// Kennzeichen, ob die Konfiguration bereits vorgenommen wurde.
        /// Erforderlich, da diese nicht im Konstruktor durchgeführt werden kann.
        /// </summary>
        private bool datagridViewKonfiguriert = false;

        /// <summary>
        /// Erstellt Grid-Ueberschriften. Und definiert was Angezeigt wird...
        /// </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 stadtColumn = new DataGridViewTextBoxColumn();
            stadtColumn.HeaderText = "Stadt";
            stadtColumn.DataPropertyName = "City";
            this.dgv.Columns.Add(stadtColumn);

            // Merken, dass die Liste konfiguriert wurde
            this.datagridViewKonfiguriert = true;
        }

Bei DataPropertyName wird die Property des gebundenen Objektes festgelegt,
die angezeigt werden soll.Achtung: es muss als Property definiert sein!

Erst die o.g. Methode aufrufen z.B. im Init der Form und dann die Datasource festlegen.

Gruß Ron

11.08.2011 - 17:19 Uhr

Hi,

und außerdem dgv.AutoGenerateColumns = false; setzt!

11.08.2011 - 17:15 Uhr

Hi,

und wenn du datasource.toList<DeinTyp>() versuchst?

11.08.2011 - 16:39 Uhr

Hi,

was steckt hinter datasource.toList()?

11.08.2011 - 16:14 Uhr

Hi,

List<ModSht0443> ergebnisListe = DbpSht0443.GetModSht0443(filter, infScope);

holt eine Objektliste, ist für dich eigentlich egal

bds bedeutet Bindingsource

Gruß Ron

11.08.2011 - 15:45 Uhr

Hi,

man kann auch die Spalten die man ansehen möchte im DGV definieren...


 private bool datagridViewKonfiguriert = false;

        /// <summary>
        /// Erstellt Grid-Ueberschriften.
        /// </summary>
        private void BuildGridHeaderForGrid()
        {
            if (datagridViewKonfiguriert)
            {
                // Die Konfiguration wurde bereits einmal durchlaufen.
                // -> Keine weitere Aktion
                return;
            }

            DataGridViewTextBoxColumn obColumn = new DataGridViewTextBoxColumn();
            obColumn.HeaderText = "OB";
            obColumn.DataPropertyName = "Hauptobnr";
            obColumn.ReadOnly = true;
            this.dgvErgebnis.Columns.Add(obColumn);

            DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
            nameColumn.HeaderText = "Name";
            nameColumn.DataPropertyName = "Einrichtungsname";
            this.dgvErgebnis.Columns.Add(nameColumn);

             // Merken, dass die Liste konfiguriert wurde
            this.datagridViewKonfiguriert = true;
        }


..Einmal im Init aufrufen...

und dann dem DGV die Objektliste als Datasource zuweisen


List<ModSht0443> ergebnisListe = DbpSht0443.GetModSht0443(filter, infScope);

                    this.bdsErgebnis.Clear();
                    this.bdsErgebnis.DataSource = ergebnisListe;
                    this.dgvErgebnis.DataSource = bdsErgebnis;

Dabei die gewünschte Property im DataPropertyName angeben...

Gruß Ron

20.06.2011 - 17:42 Uhr

Hi,

Baue doch eine Klasse, die alle Properties des gewünschten Ergebnisses mit den richtigen Datentypen enthält und lese über einen DataReader das Ergebnis Deiner Abfrage in eine Liste<T> dieser Klasse ein. Dann kannst Du die Liste als Datasource dem Datagridview zuweisen.

Gruß Ron

20.05.2011 - 15:30 Uhr

Hallo,

diese IBM:Data.Informix.dll greift widerum auf andere Dlls zu (z.B. iclit09.dll), so dass ich dann alle möglichen Dlls einbinden müsste.

Die einfachste Lösung ist der Zugriff über ODBC, bin gar nicht darauf gekommen. So braucht man nur eine DSN angeben, die dann intern aufgelöst wird.

Gruß Ron

18.05.2011 - 17:03 Uhr

Hallo,

habe eine Lösung gefunden. Für welche, die es interessiert:

Definition eines Eventhandlers, der bei erfolglosen Ladeversuch der Assembly greift und unter angegebenen Pfad nachlädt.


AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

Und dazu:


private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
        {
            //This handler is called only when the common language runtime tries to bind to the assembly and fails.

            //Retrieve the list of referenced assemblies in an array of AssemblyName.
            Assembly MyAssembly, objExecutingAssemblies;
            string strTempAssmbPath = "";

            objExecutingAssemblies = Assembly.GetExecutingAssembly();
            AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();

            //Loop through the array of referenced assembly names.
            foreach (AssemblyName strAssmbName in arrReferencedAssmbNames)
            {
                //Check for the assembly names that have raised the "AssemblyResolve" event.
                if (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) == args.Name.Substring(0, args.Name.IndexOf(",")))
                {
                    //Build the path of the assembly from where it has to be loaded.
                    //string pathPart = System.Environment.ExpandEnvironmentVariables("%INFORMIXDIR%");
                    //strTempAssmbPath = pathPart + "\\bin\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
                    strTempAssmbPath = "C:\\Programme\\informixx\\client-sdk\\bin\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
                    break;
                }

            }
            //Load the assembly from the specified path. 					
            MyAssembly = Assembly.LoadFrom(strTempAssmbPath);

            //Return the loaded assembly.
            return MyAssembly;
        }

Gruß

Ron

18.05.2011 - 15:38 Uhr

Hallo,

ja, aber wie kann ich dann einen Verweis auf diese Dll setzen?

Gruß

Ron

18.05.2011 - 15:24 Uhr

Hallo zusammen,

ich habe ein Verweis auf eine IBM.Data.Informix.dll, die unter c:\programme liegt.
Soweit funktioniert alles.
Aber das Programm wird auf einen englischen Server ausgeliefert, dort findet es die dll nicht mehr, da sie dort unter c:\programfiles liegt. Das Programm müsste beide Pfade kennen, da es auch nach Deutschland geht.

Das die dll aufrufende Projekt ist widerum eine dll. So das dieses probing nicht zu klappen scheint.

Hat jemand vielleicht einen Tipp für mich, wie man da herangehen kann?

Viele Grüße

Ron

15.03.2011 - 16:15 Uhr

Hallo,

wir haben das Problem gelöst, indem wir einen Eventhandler im Fachobjekt definiert haben, das die Oberfläche abbonnieren kann.

Dazu habe wir eine Klasse definiert, von der alle Fachobjekte erben und folgenden Code implementiert:


 [Serializable()]
    public class MODBase : INotifyPropertyChanged
    {
         protected virtual void OnPropertyChanged(string propertyName)
        {
             if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArg(propertyName));
            }
        }
        #region INotifyPropertyChanged Member

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }

In der Unterklasse wird jede Property mit folgenden Code versehen:


 public long UrsprungsID
        {
            get { return ursprungsID; }
            set
            {
                if (ursprungsID != value)
                {
                    ursprungsID = value;
                  [B]  OnPropertyChanged("UrsprungsID");[/B]                }
            }
        }

In der Oberfläche wird der Event abonniert:


 modRolleKopie.PropertyChanged += new PropertyChangedEventHandler(modRolleKopie_PropertyChanged);

So können wir darauf reagieren, wenn sich das Fachobjekt geändert hat.

Vielleicht kannst Du was damit anfangen

Gruß Ron

11.03.2011 - 10:47 Uhr

Hallo,

wir benutzen zum Speichern von Timestamps den OracleType.Timestamp. Diesen kann man einen DateTime zuweisen.

Wir erzeugen eine OracleParameterCollection, der wir den Wert übergeben. Die Abfrage wird dann über einen Reader abgehandelt:

Vielleicht hilft Dir das weiter.

Gruß

Ron

08.03.2011 - 12:23 Uhr

Hallo,

du kannst ein neues Projekt anlegen (Klassenbibliothek) und dort die DB-Zugriffe programmieren. Dieses Projekt musst du dann in deine Form-Anwendung per Verweis hinzufügen. Die Klassen aus der Klassenbibliothek kannst du dann bequem verwenden.

Gruß

Ron

16.01.2011 - 13:41 Uhr

Hi,

schau Dir doch mal folgenden Link an:

http://greatmaps.codeplex.com/

Gruß Ron

19.11.2010 - 14:32 Uhr

Hi,

habe den Code aus Deinem Link kopiert und erfolgreich ausgeführt.

Hast Du alle Verweise in Deinem Projekt (wie im Dateianhang)?

Gruß Ron

19.11.2010 - 13:15 Uhr

hi,

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

Gruß

Ron

03.11.2010 - 17:58 Uhr

Hi,

So nutzen Sie Google Maps korrekt

Einstiegspreis bei ca. 8500 EURO pro Jahr. Es gibt 2 Lizensmodelle Userbasiert (ab 100 User) und PageViewbasiert für 250.000 Page Views pro Jahr.

Gruß Ron

29.10.2010 - 15:02 Uhr

Hi,

habe ein StandardDGV von DGV abgeleitet und folgende Methoden hinzugefügt...


            this.CellFormatting += new DataGridViewCellFormattingEventHandler(StandardDataGridView_CellFormatting);
            this.CellParsing += new DataGridViewCellParsingEventHandler(StandardDataGridView_CellParsing);

  void StandardDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            try
            {
                // Prüfen, ob das DataGrid gebunden ist und ein indirektes Binding zu einem untergeordneten Objekt 
                // festgelegt wurde
                if ((this.Rows[e.RowIndex].DataBoundItem != null) &&
                    // DataPropertyName ist gefüllt und enthält mindestens einen Punkt "."
                    (!string.IsNullOrEmpty(this.Columns[e.ColumnIndex].DataPropertyName) &&
                    this.Columns[e.ColumnIndex].DataPropertyName.IndexOf(".") > 0))
                {
                    object value = GetValueFromBoundItem(this.Rows[e.RowIndex].DataBoundItem, this.Columns[e.ColumnIndex].DataPropertyName);
                    
                    // Prüfen, ob die Spalte einen Wert enthält.
                    if (value == null)
                    {
                        // Kein Wert in der Spalte -> Keine Aktion für die Formatierung erforderlich
                        return;
                    }

                     e.Value = value;
                    // Kennzeichen setzen, dass die Formatierung abgeschlossen wurde.
                    e.FormattingApplied = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler im CellFormatting. Meldung: " + ex.ToString());
            }
        }

        /// <summary>
        /// Holt per Reflection einen Wert aus einem gebundenen Objekt. 
        /// Der Pfad zu dem zu suchenden Wert wird übergeben.
        /// Bsp.: boundItem ist ein Objekt mit Member Adresse beschafft werden soll die Postleitzahl der Adresse.
        /// Die Bindingexpression lautet in diesem Fall "Adresse.Plz"
        /// </summary>
        /// <param name="boundItem">Gebundenes Fachobjekt.</param>
        /// <param name="bindingExpression">String, der den zu beschaffenden Wert beschreibt.</param>
        /// <returns></returns>
        private object GetValueFromBoundItem(object boundItem, string bindingExpression)
        {
            // Bindingexpression in Ihre Bestandteile zerlegen
            string[] parts = bindingExpression.Split('.');
            if (parts.Length < 2)
            {
                throw new InvalidOperationException("Wert kann nicht dynamisch beschafft werden, da die Bindingexpression nicht Quelle und Ziel definiert.");
            }
            // Quelle für die Datenbeschaffung vorbereiten
            object source = boundItem;

            // Quelle für die Datenbeschaffung besorgen
            source = GetDataSource(boundItem, parts, source);

            // Wert beschaffen
            PropertyInfo valueInfo = GetValueInfo(parts, source);
            object value = valueInfo.GetValue(source, null);

            return value;
        }

        /// <summary>
        /// Setzt per Reflection einen Wert in einem gebundenen Objekt. 
        /// Der Pfad zu dem zu suchenden Wert wird übergeben.
        /// Bsp.: boundItem ist eine Vertragsrelevanz. Beschafft werden soll die Postleitzahl der Adresse.
        /// Die Bindingexpression lautet in diesem Fall "Adresse.Plz"
        /// </summary>
        /// <param name="boundItem">Gebundenes Fachobjekt.</param>
        /// <param name="bindingExpression">String, der den zu beschaffenden Wert beschreibt.</param>
        /// <param name="value">Wert der gesetzt werden soll.</param>
        private void SetValueForBoundItem(object boundItem, string bindingExpression, object value)
        {
            // Bindingexpression in Ihre Bestandteile zerlegen
            string[] parts = bindingExpression.Split('.');
            if (parts.Length < 2)
            {
                throw new InvalidOperationException("Wert kann nicht dynamisch beschafft werden, da die Bindingexpression nicht Quelle und Ziel definiert.");
            }
            // Quelle für die Datenbeschaffung vorbereiten
            object source = boundItem;

            // Quelle für die Datenbeschaffung besorgen
            source = GetDataSource(boundItem, parts, source);

            // Wert setzen
            PropertyInfo valueInfo = GetValueInfo(parts, source);
            valueInfo.SetValue(source, value, null);
        }

        private static PropertyInfo GetValueInfo(string[] parts, object source)
        {
            PropertyInfo valueInfo = source.GetType().GetProperty(parts[parts.Length - 1],
                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.NonPublic);
            if (valueInfo == null)
            {
                throw new InvalidOperationException("Fehler bei der Konfiguration des DataBindings für das DataGridView. Eigenschaft '" + parts[parts.Length - 1] + "' nicht gefunden.");
            }
            return valueInfo;
        }
        private static object GetDataSource(object boundItem, string[] parts, object source)
        {
            for (int i = 0; i < parts.Length - 1; i++)
            {
                PropertyInfo sourceInfo = boundItem.GetType().GetProperty(parts[i],
                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.NonPublic);
                if (sourceInfo == null)
                {
                    throw new InvalidOperationException("Fehler bei der Konfiguration des DataBindings für das DataGridView. Eigenschaft '" + parts[i] + "' nicht gefunden.");
                }
                source = sourceInfo.GetValue(source, null);
            }
            return source;
        }

Aufruf: bei dem Binding am StandardDGV ObjectVariableName.Property

Gruß Ron

15.10.2010 - 11:37 Uhr

hi,

vielleicht hilft Dir das weiter


MySQL unterstützt eine ähnliche Funktion, CONCAT(). Nähere Informationen zur Verkettung in Oracle, PostgreSQL und Microsoft SQL Server finden Sie im Abschnitt »CONCATENATE« in Kapitel 3, Befehlsreferenz aller SQL-Anweisungen. 

SQL99-Syntax 

CONCATENATE('string1' || 'string2')

   
MySQL-Syntax 

CONCAT(str1, str2, [,...n])

Gruss Ron

30.09.2010 - 19:51 Uhr

Muss definiert sein z.B. string path = "C//....." wo du die Dateien abgelegt hast...

in der For-Schleife: path + "t" + i.toString() + ".txt"

30.09.2010 - 19:41 Uhr

Du könntest vielleicht so vorgehen:


 for (int i = 0; i < 224; i++)
            {
                if (this.Controls[i].Name.Equals("TextBox" + i.ToString()))
                {
                    Controls[i].Text = File.ReadAllText(path + i.ToString());
                }
            }

30.09.2010 - 18:48 Uhr

Die Texte haben doch sicher einen Sinn. Was kann man denn damit machen, werden sie nur angezeigt oder willst du sie weiterverarbeiten?

Wenn du ein etwas größeres Projekt planst, wirst du um Klassen und Objekte nicht vorbeikommen...

Mir hat damals folgendes Buch sehr geholfen

http://www.amazon.de/Objektorientierte-Softwareentwicklung-Analyse-Design-mit/dp/3486255738

30.09.2010 - 18:33 Uhr

Hi,

ich würde eine Datenbank dafür benutzen. Was sind denn das für 200.. Texte? Vielleicht wäre es sinnvoll sie in Klassen zu strukturieren und diese dann in einer DB abzulegen.

mfg ron

19.07.2010 - 11:32 Uhr

Hi,

hilft Dir das ?


 protected override bool ProcessDialogKey(Keys keyData)
        {
            try
            {
                if (keyData == Keys.Enter)
                {
                    DoSomething
                    return true;
                }
                else
                {
                    return base.ProcessDialogKey(keyData);
                }

            }
            catch (Exception exception)
            {
                                return false;
            }
        }

im UserControl...

mfg

Ron

09.07.2010 - 13:52 Uhr

hi,

form.ShowDialog glaube ich...

mfg ron

29.06.2010 - 09:40 Uhr

Hallo,

kann man die Textfiles nicht als XML-Dateien liefern? Zwar müsste man deswegen das Verfahren ändern, aber man hätte eine nachvollziehbare Struktur, die man ausserdem validieren könnte.

Gruß

Ron

28.06.2010 - 15:51 Uhr

Hi,

ich würde die Textfiles-Zeilen ersteinmal in ein einheitliches Format konvertieren.

Bsp: A, D, G und A, C, G

in 1. A, ,D,G
2. A,C, ,G

Dann kannst Du eine Tabelle nutzen und die Leer-Werte (,,) werden mit null gefüllt.

Mit freundlichen Grüßen

Ron

28.05.2010 - 13:59 Uhr

Hallo zusammen,

ich binde ein Javascript-File in meine Anwendung ein, die ich über ein Windows.form webbrowser lade...

nun liefert window.external im Script null. D.h. auf meinen Rechner funktioniert es, aber bei meinem Kollegen kommt immer null...

Müssen dort Einstellungen vorgenomen werden?

Mfg Ron

13.03.2010 - 20:23 Uhr

Hallo zusammen,

hat zufällig jemand einen Tipp, wo man gute GeoRSS -Daten herbekommt? Ich möchte zum Beispiel aktuelle Stürme oder Erdbeben als Overlay in Mappoint 2006 einlesen.

Vielen Dank und Gruß

Ron

05.03.2010 - 09:59 Uhr

Hallo der-schlingel,

wir lesen die gefragten Daten aus Oracle mit folgendem Select aus:


string queryString = "SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '" + Tablename + "' ORDER BY TABLE_NAME, COLUMN_ID ";

Gruß Ron

04.03.2010 - 11:42 Uhr

Hallo JAck30lena,

Danke für Deine Antwort. Habe meine Methode (hoffentlich richtig) nach Deinen Vorschlag geändert...


static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // Unbehandelte Ausnahme verarbeiten
            Exception ex = e.ExceptionObject as Exception;
            if (ex != null)
            {
                HandleUnhandledException(ex);
            }
            else
            {
                HandleUnhandledException(new Exception("Unbehandelter Fehler: e.ExceptionObject.GetType().ToString(): " + e.ExceptionObject.GetType().ToString() + "e.GetType().ToString() " + e.GetType().ToString() + "sender.GetType().ToString() " + sender.GetType().ToString()));
            }
        }

Allerdings ist mir das isTerminated nicht ganz klar...

Gruß Ron

04.03.2010 - 10:56 Uhr

Hallo JAck30lena,

was für Eventualitäten siehst Du?

Eine Message-Box kann ich einbauen, aber wird die Methode denn nicht nur bei einer Exception aufgerufen, die dann dort behandelt wird?

Denn Fehler kann ich leider nicht reproduzieren, er tritt spontan und in unterschiedlichen Kontexten auf.

Gruß Ron

04.03.2010 - 10:44 Uhr

Hallo zusammen,

Danke ersteinmal für die schnellen Antworten.

In der Main-Methode habe ich auch einen try-catch-Block. Die Anwendung besitzt keine Neben-Threads.

In keiner Exception-Behandlung wird ein Programmabbruch eingeleitet.

Außerdem fange ich unbehandelte Exceptions ab.


private static void InitErrorHandling()
        {
            // Unbehandelte Exceptions auffangen
            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

            // CommonDialog-Manager initialisieren
            CommonDialogContext context = new CommonDialogContext();
            if (Properties.Settings.Default.SendExceptionsToOracleDatabase)
            {
                context.OutputOptions.Add(
                    new CommonDialogOracleOutputOption(
                        ConnectionManager.Current.LiefereVerbindungsStringFuerFachNamen (Settings.Default.LAGER)));
            }
            CommonDialogManager.Current.Open(context, Properties.Settings.Default.UseTextfileTrace);
            CommonDialogManager.Current.ApplicationClose += new EventHandler(Current_ApplicationClose);
        }

und die Eventhandler...


 static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // Unbehandelte Ausnahme verarbeiten
            HandleUnhandledException(e.ExceptionObject as Exception);
        }



        static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            // Unbehandelte Ausnahme verarbeiten
            HandleUnhandledException(e.Exception);
        }

        private static void HandleUnhandledException(Exception exception)
        {
            // Unbehandelte Ausnahme anzeigen -> Fehler, die dabei auftreten werden ignoriert
            try
            {
                if (exception != null)
                {
                    CommonDialogManager.Current.ShowException(null, exception, "General.SevereError");
                }
            }
            catch (Exception ex)
            {
                // Aufgetretene Fehlermeldung in die Trace-Ausgabe ausgeben
                Trace.WriteLine("Fehler bei der Anzeige einer unbehandelten Ausnahme. Meldung: " + ex.ToString());
            }
            finally
            {
                // Sicherstellen, dass die Anwendung geordnet beendet wird
                CloseApplication();
            }
        }

Die Methoden werden in der Main aufgerufen.

Ich denke, damit müsste ich alle Exceptions abfangen.

Das Programm bleibt nicht hängen oder so, sondern schliesst sich spontan und ist dann einfach weg.

Gruß Ron

04.03.2010 - 08:57 Uhr

Hallo zusammen,

mein etwas größeres Windows-Forms Projekt stürzt spontan an unterschiedlichen Stellen ab.

Der User will ein Handbuch von dem Programm erstellen, welches auf einem Server läuft und er sich über ein Emulationsfenster ansehen und bedienen kann.

Wenn er ein Screen-Shot von unterschiedlichsten Fenstern gemacht und diese in Word (auf seinem lokalen Rechner) eingefügt hat, dann wieder in das Emulationsfenster sieht, ist das Programm manchmal abgestüzt.

Eine Fehlermeldung wird nicht ausgegeben. Ich fange die unbehandelten Fehler über AppDomain.CurrentDomain.UnhandledException ab und schreibe sie in eine Datenbank, dort wird aber leider nichts abgefangen...

Weiß zufällig jemand was das sein könnte oder was man da machen kann?

Danke und Gruß Ron

04.02.2010 - 13:31 Uhr

Hi,

also da handelt es sich um ein kleines Mißverständnis, da habe ich mich wohl nicht richtig ausgedrückt. Das Beispielprojekt ist keines von uns. Ein Kollege hat es wohl von Dot.Net Pro (oder war es die andere Zeitschrift?) heruntergeladen.

In Zukunft werde ich die Quelle wohl besser angeben. Sorry.

Mfg

Ron

04.02.2010 - 12:08 Uhr

Hi,

ein versehen...
Ron