Laden...

Forenbeiträge von arakhsh_j Ingesamt 30 Beiträge

04.04.2012 - 11:20 Uhr

Danke erst mal für die Antworten, und die Links,
Ms-Chart scheint mir auch am sinnvollsten zu sein.

Gruß

03.04.2012 - 17:29 Uhr

Hallo,

nach Tage lange Suche und ausprobieren, hab ich eine Frage an die Chart-Experten unter Euch.

für eine Kunden Anwedung (keine web-Anwedung) möchte Sensor werte anzeigen lassen, nun stehe vor der Wahl der richtige Diagramm-Anzeige. Leider weiss ich nicht welche von vielen Möglichkeiten für welche Art von Anwedung passend ist.

  1. Chart-Controll von VS selbst, sieht zwar sehr schick aus aber ich seh es wird überwiegend im Webbereich verwendet, weshalb??

  2. Zedgraph und viele andere GDI+ basierte DLLs, sind gut aber so eins konnte ich auch selbst mit viel Übung schreiben, und dann hab ich auch kein Lizenz Schwirigkeiten später, und dnatürlich eine Menge Erfahrung.

  3. habt ihr andere Vorschläge?

Leider fehlt mir die Zeit für einen trial and error Versuch, deshalb soll die erste Wahl die letzte sein.

bin für alle Art Tipps und Anregungen Eure Seits offen.

29.03.2012 - 11:46 Uhr

Danke erst mal für die Antwort.

die fkt. DataCrawler() sucht nahc bestimmten Byte-Muster, die mir den ANfang eines neuen Pakets signalisieren und nimmt den Paket aus dem globalen Array DataArray raus. ich dachte die fkt.

 serialport.read(param,param,param,param); 

tut das gleiche wie

 serialport.readexisting(); 

nur bei der ersten hab ich roh Werte bei der zweiten die Werte als String kodiert!!?

das Problem mit string ist, dass ich die Daten als Rohwerte brauche und nicht kodiert, denn ich muss die weiter verarbeiten (filtern usw...). gibts eine möglichkeit die Daten aus einem String wieder zu Rohwerte zu transformieren??

writetimeout zu erhöhen ist keine saubere Lösung, aus der Fehlermeldung kann ich aber keinen bezug zu WriteTimeOut finden. oder leg ich da falsch??

28.03.2012 - 21:13 Uhr

sorry für die verzögerung, war nicht am System, inzwischen hab ich heraus bekommen, dass es etwas mit writeTimeOut zu tun hat wenn ich es auf über 3 sek. erhöhe bekomme ich keinen,
es ist aber kein saubere Lösung, habt ihr vielleicht einen Tipp wie ich dieser Meldung beweltigen kann.


       this.serialPort.DataReceived += this.readDataFromSerialPort;
     
        public void SendDataToSerialPort(byte[] data)
        {
            if (this.serialPort != null)
            {
                try
                {
                    this.serialPort.Write(data, 0, 1);
                }
                catch (IOException ex)
                {
                    MessageBox.Show(" " + ex);
                }
            }
        }
         .
         .
        private void readDataFromSerialPort(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] tempbytearra;
            int databytes;
            int datarraylastindex;

            databytes = this.serialPort.BytesToRead;
            datarraylastindex = DataArray.Count;
            tempbytearra = new byte[databytes];

            this.serialPort.Read(tempbytearra, 0, databytes);
            this.DataArray.AddRange(tempbytearra);
            DataCrawler();
        }

Danke schon mal im vorasu!

28.03.2012 - 12:33 Uhr

Hallo,

ich hab seit gestern viele Beiträge gelelsen, leider ohne Erfolg. vom PC aus sende ich für 5 Sek. alle 50 ms einen Byte an MC und zwischen durch bekomme ich paar Bytes vom MC zurück.

das ganze hab ich event gesteuert gemacht, d.h. mit serialport.readbyte(), das Problem dabei war, dass nicht alle Daten angekommen sind. Jetzt nehm ich statt readbyte() die read()-Funktion, jedoch
bekomme ich nach paar mal Daten seden mit write() und lesen mit read(), einen IOexception bei
write()-Funktion.

hab keinen schimmer woran das liegt?
Serialport ist dabei auf open, write und read werden bei vom selben thread aus benutzt.
es muss irgenderwas mit read()-Funktion zutun haben, denn solange ich mit readbyte() lese und mit write schreiben bekomme ich keine FEhlermeldung.

19.03.2012 - 13:30 Uhr

da sollte UInt32.TryParse() funktionieren.

Danke erstmal für die ANtwrot.

mit tryparse bekomme ich 0 für das zeichen "0x0a"


                       "0x0a"
 UInt32.TryParse(hex, out DataLength);
 // nach der operation ist der Datalength = 0x0000...

gibt es keinen anderen weg??

19.03.2012 - 13:10 Uhr

Hallo,

ich habe folgendes Problem:

ich sende Daten von MC zu PC, die Daten werden im MC per printf und seriell an den pc geschickt.

zu synchronistaion sende ich am anfang jedes Datenpakets einen Zeilenumbruch mittels
printf("\n")
.
printf("%x",daten); // erste Daten byte ist die paketlaenge, 127 = 0x7f.

die werden dann durch printf als ascii zeichen an pc gesendet.

auf dem pc bekommen ich für oben beschribene Daten folgendes:

für \n -> 0x0d,
für 0x7f -> 0x0a

nun will ich die aber wieder zu normalen form umwandeln, d.h. anstatt 0x0a möchte die richtige paketlänge, also die zahl 127 = 0x7f haben.

wisst ihr wie ich das mit c# bewerkstelligen kann???

19.01.2011 - 10:58 Uhr

Also leute es lag an der Deklaration es war mir garnicht bekannt, dass man auch ein Liste wie folgt deklarieren kann:


List<string[]> myList = new List<string[]>;

also statt nur string auch einen strin[]-Array.

vielen Dank für die ganzen Tipps und Antworten.

19.01.2011 - 10:41 Uhr

ja genau rihctig aber wenn ich es mit


myList.Add(myArray);

schriebe dann spuckt er einen Feheler, dass er nicht string in stering[] konvertiernen kann.
und wenn ich ,


myList.Addrange(myArray);

neheme, dann kopiert er nicht ein Array zu der Liste sondern die ganze Array-Elemnte einzeln??????

und geunau das ist mein Problem, da ich eine Liste mit mehreren, in sich gekapselten Arrays, haben möchte!

19.01.2011 - 09:21 Uhr

Ja, aber das Problem ist wenn ich ein Array der Liste einfüge dann steht da nicht ein gekapseltes Array sonder eine Liste mit ganze Arrayelemente.
d.h wenn ich wie folgt vor gehe:



string[] meinArray = new string[3];

meinArray[0] = "1. Element";
meinArray[1] = "2. Element";
meinArray[2] = "3. Element";

mylist.Addrange(meinArray);


dann habe ich als ergebniss eine Liste mit 3 Elemente und nciht eine liste mit einem Array.

mein Ziel ist aber mehrere Arrays in sich gekapselt in eine Liste haben.
gibts ne möglichekit so etwas auch mit Liste<> zu realisieren????

araskhsh

18.01.2011 - 15:46 Uhr

@gfoidl Danke für den Tipp mit neuer klasse hat mir auc geholfen, aber wie trage ich das in .config datei (xml) ein?
der nimmt das automatische nicht ein, deswegen muss ichw ohl manuell machen.



internal sealed partial class Settings {
        
      [UserScopedSetting()]
      [SettingsSerializeAs(SettingsSerializeAs.Xml)]
      [DefaultSettingValue("")]
      public Arraylist MyArrayList
      {
        get { return this["MyArrayList"] as Arraylist; }
        set { this["MyArrayList"] = value; }
      }
}


und bei App.config habe ihc folgendes selbst eingetragen


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="test1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <applicationSettings>
    <test1.Properties.Settings>
      <setting name="MyArrayList"  serializeAs="System.Collections.ArrayList">
        <value> </value>
      </setting>
    </test1.Properties.Settings>
  </applicationSettings>
</configuration>

18.01.2011 - 13:56 Uhr

also ich habe einfach neue funktion in class setting gewschrieben.


internal sealed partial class Settings {
        
        
      [UserScopedSetting()]
      [SettingsSerializeAs(SettingsSerializeAs.Xml)]
      [DefaultSettingValue("")]
      public Arraylist MyArrayList
      {
        get { return this["MyArrayList"] as Arraylist; }
        set { this["MyArrayList"] = value; }
      }

   }

es scheint zu funktionieren, aber so ganz sicher bin ich mir noch nicht.
sollte es nicht gehen dann melde ich mich nochmal.

danke für den Tipp.

18.01.2011 - 11:27 Uhr

Hallo,

ich möchte eine Kofig-Datei mit VS-2008 erstellen.
bei Setting habe ich berets die Datei Typ als Arraylist eingestellt.


namespace excel_sql.Properties {
    
    
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute ("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
        
        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public global::System.Collections.ArrayList MyLoginArray {
            get {
                return ((global::System.Collections.ArrayList)(this["MyLoginArray"]));
            }
        }
    }

und im Programm Code möchte ich mehere Arrays zu o.g. Arraylist hinzufügen.
dabei bekomme ich immer die Meldung das das Objekt (MyLoginArray) nicht instzansiert ist!!


 private void MyLoginDaten()
    { 
       private static Settings setting = new Settings();
       public string[] LoginArray = new string[5]; 

      LoginArray[0] =  stdschematxt.Text;
      LoginArray[1] = servertxt.Text;
      LoginArray[2] = nutzertxt.Text;
      LoginArray[3] = passworttxt.Text;
      LoginArray[4] = stdschematxt.Text;

      setting.MyLoginArray.Add(LoginArray);

    }


wisst ihr vielleicht was ich da falsch gemacht habe!

14.01.2011 - 09:31 Uhr

also leute ihr habt recht, ich habe alles was mit commadnbuilder und adapter zu tun hat rausgeschmiessen udn mit ExecuteNonQuery() probiert und jetzt klappt s endlich.

Vielen Dank!!

14.01.2011 - 08:44 Uhr

Servus,

ich bin kurz dafür den Kopf gegen die Wand zu hauen.
seit gestern versuch ich NUR eine Spalte einer bestehende Mysql-Tablle einzufügen es will einfach nicht klappen ich habe alle mögliche probiert GEHT NICHT!!!!
schaut euch bite den COde an, villeicht fällt euch ja etwas ein.


 private void SpalteEinfuegen_Click(object sender, EventArgs e)
    {
      AddSpalteSql addspalteform = new AddSpalteSql();
      string tabellename;
      string AddSpaltebefehlstr;
      MySqlCommand cmdaddspalte = new MySqlCommand();
      MySqlDataAdapter adapter = new MySqlDataAdapter();
      MySql.Data.MySqlClient.MySqlCommandBuilder Mysqlcmdbuld;

    
        tabellename = "tabellenname";

        AddSpaltebefehlstr = "ALTER TABLE "+tabellename+
                             " ADD "+ AddSpalteSql.spaltennameStr +" char default '1' ";

        cmdaddspalte.CommandText = AddSpaltebefehlstr;
        cmdaddspalte.Connection = sqlVerbindungForm.mysqlconn;
        adapter.SelectCommand = cmdaddspalte;
        adapter.InsertCommand = cmdaddspalte;
        Mysqlcmdbuld = new MySql.Data.MySqlClient.MySqlCommandBuilder(adapter);

      }
    }

13.01.2011 - 15:28 Uhr

also ich habe s gelöst ein mysqladapter hat gefehlt trotzdem Danke für deine antwort.

13.01.2011 - 14:56 Uhr

das mit dem sqöparam werde ich machen 😉

es gibt keine Einschränkung bei der Rechte ich habe es selbst bei mysqlquereybrowser ausprobiert klappts wunderbar nur extern funkt nicht!!
ich bekomme auch keine Fehlermeldung.

muss ich eventuell nach:


cmdaddspalte.Connection = sqlVerbindungForm.mysqlconn;

vielleich ein mysqlcommand-Update durchführen !!!

13.01.2011 - 14:42 Uhr

Hallo,

ich habe folgendes Problem, weiss leider nicht warum mit folgendem Code keine Spalte der Tabelle eingefügt wird !!

danke voraus für eure Beiträge und Tipps.

Voraussetzung: die verbing zu mysql beteht bereits.


private void SpalteEinfuegen_Click(object sender, EventArgs e)
    {
     string neue_spalten_Name = "muster Spalte";
      string tabellename = "meine_Tabelle";
      string AddSpaltebefehlstr;
      MySqlCommand cmdaddspalte = new MySqlCommand();


        AddSpaltebefehlstr = "ALTER TABLE "+tabellename+
                           " ADD "+ AddSpalteSql.spaltennameStr +" char default 1";
        cmdaddspalte.CommandText = AddSpaltebefehlstr;
        cmdaddspalte.Connection = sqlVerbindungForm.mysqlconn;

        DBsql.sqlDatenHolen();
      }

    public static void sqlDatenHolen()
    {
      DataTable sqldatentable = new DataTable();
      DataTable table = new DataTable();
      MySqlDataAdapter mysqladap = new MySqlDataAdapter();
      MySqlCommand cmd = new MySqlCommand();
      string cmdstring = "SHOW TABLES";
      string colname;

      cmd.CommandText = cmdstring;
      cmd.Connection = sqlVerbindungForm.mysqlconn;
      mysqladap.SelectCommand = cmd;
      mysqladap.Fill(table);
    }
22.12.2010 - 15:57 Uhr

erst mal vielen Dank für eure zahlreichen Antworten und Tipps.Es tut mir für die ganzen Tippfehler und dadurch entstandenen Umständen leid.

Ich hab den Lösugnsweg von Th69 ausprobiert, und muss sagen war vom Ergebniss begeistert funktioniert jetzt wunderbar. 😃)

22.12.2010 - 15:27 Uhr

also mit übersprungen meinte ich nur den foreach-teil und nicht die if-anweisung.
das wird übersprungen obwohl die list 3 Einträge beinhaltet??

übrigens vielen dank für die schnelle antworts 😃

22.12.2010 - 15:18 Uhr

ehrlich gesagt ich habe erst seit tagen mit c# angefangen, wo setzt man dann überhaupt die hexanzeige!!!

22.12.2010 - 15:18 Uhr

und noch was wisst ihr vielleicht warum folgende zeilencode nicht funktioniert.

ich möchte von einer liste, befüllt mit Namen von spalten einer Excel-Tabelle, ein einziges string erzeugen mit Spaltennamen und Kommas.
dh. wenn in meine liste folgendes steht :

List<string> liste = new List();

der lise werden 3 strings werte zu gewiesen. [IDnr, Personalnr , konto ].
nun will ich diese liste in einem einzigen string übertragen.
aber wird leider der u. g. code einfach übersprungen!!!

if (liste.Count > 1)
      {
        liste.ForEach(delegate(string spalte)
        {
          spalte =spalte + " ,";
          spaltenListe = splate;
        });
      }
22.12.2010 - 15:01 Uhr

hallo leute ich hbae folgendes problem !!
wenn ich auf einem freien nicht beschriebenes Feld innerhalb listbox drucken, dann bekomme ich plotzlich als listbox.selectedindex die Hex-zahl 0xffff ffff als antwort.
ich habe kein ahnung wo die zahl her kommt!!!!!

freue mich auf eure Tipps!

20.12.2010 - 14:09 Uhr

also endlich nach einer seeeehr langen zeit habe ich den fehler gefunden, der o.g. code ist zum größten teil richtig. aber bei excel ist so das er am ende der tabellensheetnamen ein $ zeichen sitzt, also muss der obere code so ergänzt werden:


System.Data.DataTable tab = connect.GetOleDbSchemaTable(
		  OleDbSchemaGuid.Columns, 
		  new object[] {null, null , WorksheetName+"$", null});

gruss arakhsh

20.12.2010 - 12:16 Uhr

hallo danke für eure beiträge, ich habe viel rumprobiert und habe jetzt heraus gefunden wo der hacken ist.

also soweit ich überprüfen konnte kann die OLEDB funktion von oben NUR die Tabellen-Worksheets von alten Excel-Dateien sehen also vor 2000 und alle Tabellen-worksheets die mit Excel 200 und höhere Version erstellt worden sind, werden einfach nicht gelesen und die funktion spuckt dann am ende null tabellen worksheets.

wisst woran es liegen konnte???


public static string[] GetColumnNames(string excelFile, string WorksheetName)
    {
      
      
      OleDbConnection connect = new OleDbConnection(); 
      try
      {

        connect.ConnectionString = "Data Source=" + excelFile +
        ";Provider=Microsoft.Jet.OLEDB.4.0" +
        ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

      
        connect.Open();
      }
      catch (Exception ex)
      {
        System.Console.WriteLine("falsch"+ex);
      }
	    
      /* hier wird überprüft, ob die worksheets gelesen werden. */
 
     
     System.Data.DataTable neu = connect.GetOleDbSchemaTable(  
      OleDbSchemaGuid.Tables,
      new object[] {null, null, WorksheetName, null}); 

     /* wenn ja spalten lesen und conncetion schliessen . */
      
     
      return columnNames;
    } 


16.12.2010 - 15:41 Uhr

das komischerweise der o.g. code kann nur die spalten von nur einer bestimmten excel-datei anzeigen, und wenn ihc was anderes lade sihet er nur noch NULL als spalten anzahl!!!

muss ich irgendetwas in esxcel-datei einstellen oder gibts zu mindest ne möglichkeit die einstellungen und informationen von der Exce-Datei anzusehen, die funktioniert!!

16.12.2010 - 15:32 Uhr

also hallo noch mal,

ich habe folgendes Problem ich möchte die spalten einer Excel Datei zum auswählen anzeigen (z. .b die excel-tabelle hat 3 spalten mit thema1 , thema2, thema3 als erste tabellenzeile, diese möchte ich anzeigen lassen).


public static string[] GetColumnNames(string excelFile, string WorksheetName)
    {
	    .
            .  Verbindung zur Datei;
            .
	    connect.Open();

	    
      System.Data.DataTable tab = connect.GetOleDbSchemaTable(
		  OleDbSchemaGuid.Columns, 
		  new object[] {null, nul
l, WorksheetName, null});
	    
      connect.Close();

  	  string[] columnNames = new string[tab.Rows.Count];

	    for (int i = 0; i < tab.Rows.Count; i++) 
	    {
		    columnNames[i] = tab.Rows[i]["Column_Name"].ToString();
  	    }

      
	    return columnNames;
    } 

Danke voraus für Eure Antworten und Tipps!

14.12.2010 - 14:56 Uhr

also vielen Dank Leute, da der Aufwand am geringsten war habe ich den Code so wie der Taipi88 vorgeschlagen hat, erweitert und jetzt funkts . 👍
aber macht euch keine Sorgen, da ich ja noch vieles mit dieser Datei anstellen will/werde, werden bestimmt noch weitere Fragen kommen!

vielen Dank!!

14.12.2010 - 13:24 Uhr

also ich möchte irgend eine beliebige Excel Datei öffnen(das krieg ich noch hin) und das Programm soll automatische die Namen von Arbeitsmappen auslesen und diese Namen dann in eine Listbox ausgeben.

überigens danke für die schnelle antwotr!

14.12.2010 - 12:53 Uhr

Hallo,

ich habe folgendes Problem, ich möchte die Arbeitsmappen einer Excel-Datei als "Items" in einem Listbox anzeigen lassen, und dann durch klicken auf die entsprechende Mappe die Datei bearbeiten können.

freue mich auf eure Antworten und Tipps.


public static void excel_auruf(string file)
    {
      Worksheet ws;

      Microsoft.Office.Interop.Excel.Application excel = null;
     
      string zellwert;
      string datei = file;

      Workbook wb = null;
     
     try
     {
      // Excel starten
      excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
      excel.Visible = false;

      // Datei öpffnen
      wb = excel.Workbooks.Open(
      datei,
      ExcelKonstanten.UpdateLinks.DontUpdate,
      ExcelKonstanten.ReadOnly,
      ExcelKonstanten.Format.Nothing,
      "", // Passwort
      "", // WriteResPasswort
      ExcelKonstanten.IgnoreReadOnlyRecommended,
      XlPlatform.xlWindows,
      "", // Trennzeichen
      ExcelKonstanten.Editable,
      ExcelKonstanten.DontNotifiy,
      ExcelKonstanten.Converter.Default,
      ExcelKonstanten.DontAddToMru,
      ExcelKonstanten.Local,
      ExcelKonstanten.CorruptLoad.NormalLoad);

      // Arbeitsblätter lesen
      Sheets sheets = wb.Worksheets;
      
      // ein Arbeitsblatt auswählen…  diese zeiel funktioniert nur wenn ich bestimmte arbeitsmappe explizit entweder als            [CENTER]zahl oder Name wähle!!!

      Worksheet ws = (Worksheet)sheets.get_Item("x"); // x steht für eine beiliege zahl