chris78
Goto Top

Globale DataTable in VisualStudio erstellen

Hallo,
ich bin gerade dabei eine kleine Anwendung zu schreiben in der ich eine Tabelle generiere.
der erste Teil funktioniert. Allerdings möchte ich in einer anderen Funktion ebenfalls auf die Tabelle zugreifen, das geht irgendwie nicht. Ich bekomme sie nicht global.

das ganze sieht so aus:
 dt.Columns.Add("Panel");  
            dt.Columns.Add("Timestamp");  
            for (int i = 0; i < arrayb; i++)
            {
                String splitten = outargs[i].Split(separator);
        //        panel.Add(splitten);
        //        panel.Add(splitten[1]);
        //        liste.Add(panel);
                //     dt.Rows.Add(splitten.Take(i).ToArray());
                //     dt.Rows.Add(splitten[1].Take(i).ToArray());
                //dt.Rows.Add(new object { (splitten, (splitten[1] });
                DataRow dr = dt.NewRow();
                dr["Panel"] = splitten;  
                long timest = Convert.ToInt64(splitten[1]);
                dr["Timestamp"] = DateTimeOffset.FromUnixTimeMilliseconds(timest); // or dr[1]=24;  
                dt.Rows.Add(dr);

            }

            tabelle.DataSource = dt;


        }
tabelle.DataSource ist das Gridview element, was hier befüllt wird. nun möchte ich an anderer Stelle einer anderen Funtion eine Reihe hinzufügen mit dt.Rows.Add(dr);
dann erhalte ich dort den Fehler im VisualStudio : Der Name "dt" ist im aktuellen Kontext nicht Vorhanden.
Wie und wo müsste ich denn die Tabelle mit Spaltennamen definieren damit ich sie von jeder Funktion aus bearbeiten kann?

Vielen Dank

Content-ID: 1691616742

Url: https://administrator.de/forum/globale-datatable-in-visualstudio-erstellen-1691616742.html

Ausgedruckt am: 23.12.2024 um 03:12 Uhr

150345
150345 05.01.2022 aktualisiert um 11:32:00 Uhr
Goto Top
Guten Morgen,

Visual Studio ist eine IDE und keine Programmiersprache.
Du programmierst gerade mit C#, oder?

Mit diesem kleinen Snippet kann man nichts genaueres sagen. Grundsätzlich hast du ein Problem mit den Scopes. Lokale Variablen stehen, wie der Name schon verrät, nur lokal zur Verfügung. Diese kannst du nicht in einer anderen Funktion nutzen. Entweder musst du die Werte in einer Instanzvariable speichern oder innerhalb der Funktion die andere Funktion aufrufen und die Variable als Parameter übergeben.

Du solltest dich daher mal mit den Grundlagen beschäftigen. Hier mal eine Erklärung zu den Scopes:
https://www.pluralsight.com/guides/understanding-scope-and-visibility-in ...

MfG
143611
143611 05.01.2022 aktualisiert um 11:40:40 Uhr
Goto Top
((DataTable)tabelle.DataSource).Rows.Add(dr);

...und befolge ganz dringend den Rat von @150345 ;)
chris78
chris78 05.01.2022 um 11:49:02 Uhr
Goto Top
Vielen Dank für die Antwort.
genau das ist mein Problem.
die Tabelle, die ich hier anlege und mit Daten füttere, wie lege ich diese global an?

 DataTable dt = new DataTable();
            dt.Columns.Add("Panel");  
            dt.Columns.Add("Timestamp");  

ich hatte es schon versucht über eine klasse:
public class globalparameter
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Panel");  
            dt.Columns.Add("Timestamp");  
    }

Aber das hagelt nur an Fehler:
fehler
150345
150345 05.01.2022 aktualisiert um 12:47:30 Uhr
Goto Top
Hallo,

bitte mal den vollständigen Code posten. Das meiste sind einfach nur Syntaxfehler.

Ich kann dir an dieser Stelle nur nochmal den Rat geben, dass du dich mal mit den Grundlagen beschäftigen solltest z.B. ein Online Video Kurs auf Udemy oder Linkedin eLearning. Da sind dann auch viele kleine Übungen enthalten, mit denen du schrittweiße Programmieren lernen kannst.

Aber wenn du nicht mal die Fehler interpretieren kannst, dann können wir dir schlecht weiterhelfen....

Edit: Weil ich es gerade sehe....bitte halte dich an die Code Konventionen von C#. Für Klassennamen wird Pascal Case genommen. Also "GlobalParameter" satt "globalparameter".
https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style ...

MfG
chris78
chris78 05.01.2022 um 13:20:42 Uhr
Goto Top
Das ist der ganze Code, mein Problem beginnt hier:
private void button3_Click(object sender, EventArgs e)
Wenn ich das Programm starte, wird die Tabelle gefüllt.
Nun möchte ich zuerst einen Eintrag bei buuton3_klick hinzufügen, das ist alles. Später muss ein Eintrag auch wieder heraus gelöscht werden, je nach Checkbox.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using com.itac.mes.imsapi.client.dotnet;
using com.itac.mes.imsapi.domain;
using com.itac.mes.imsapi.domain.container;
using System.Windows.Forms;



namespace IMS_Init_Demo
{




    public partial class Form1 : Form
    {
        iTAC_Init init;
        private static IMSApiDotNet imsAPI;
        private static IMSApiSessionContextStruct sessionContext;
        IMS_Init_Demo.Properties.Settings appSettings = new IMS_Init_Demo.Properties.Settings();
      
        public Form1()
        {
            InitializeComponent( );
                string error = "";  
            bool initialized = false;
            init = new IMS_Init_Demo.Init(ref imsAPI, out sessionContext, out error, out initialized);
            if (initialized)
            {
                textBox1.AppendText("Serververbindung erfolgreich hergestellt!\r\n");  



            }
            else
            {
                textBox1.AppendText(error);
            }

            string mode = "MODE|3" ;  

            
            string station = "ST|" + appSettings.Itac_StationID;  
            string eingabe = new string { station, mode };
            string customErrorString = "";  
            string outargs = new string { };
            //string temp_roll_nr = (string) roll_nr;
            int result = imsAPI.customFunction(sessionContext, appSettings.Itac_CF, eingabe, out outargs, out customErrorString);
            roll_nr.Clear();
            string errorText = "";  
            int arrayb = outargs.Length;
            char separator = '|';  
            //  List<List<string>> liste = new List<List<string>>();
            // List<string> panel = new List<string>();
            DataTable dt = new DataTable();
            dt.Columns.Add("Panel");  
            dt.Columns.Add("Timestamp");  
            for (int i = 0; i < arrayb; i++)
            {
                String splitten = outargs[i].Split(separator);
        //        panel.Add(splitten);
        //        panel.Add(splitten[1]);
        //        liste.Add(panel);
                //     dt.Rows.Add(splitten.Take(i).ToArray());
                //     dt.Rows.Add(splitten[1].Take(i).ToArray());
                //dt.Rows.Add(new object { (splitten, (splitten[1] });
                DataRow dr = dt.NewRow();
                dr["Panel"] = splitten;  
                long timest = Convert.ToInt64(splitten[1]);
                dr["Timestamp"] = DateTimeOffset.FromUnixTimeMilliseconds(timest); // or dr[1]=24;  
                dt.Rows.Add(dr);

            }

            tabelle.DataSource = dt;


        }

        private void button1_Click(object sender, EventArgs e, DataGridView tabelle)
        {
            string error = "";  
            bool initialized = false;
            init = new IMS_Init_Demo.iTAC_Init(ref imsAPI, out sessionContext, out error, out initialized);
            string version;
            imsAPI.imsapiGetLibraryVersion(out version);
            textBox1.AppendText(version + "\r\n");  
            textBox1.AppendText("\r\n");  
            if (initialized)
            {
                textBox1.AppendText("Serververbindung erfolgreich hergestellt!\r\n");  
                
                
            
            }
            else
            {
                textBox1.AppendText(error);
            }
        }
       



        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            string nutzen = "0";  
            string sperren = "3";  
            
            if (checkBox1.Checked == true)
            {
                nutzen = "1";  
                    };

            if (checkBox2.Checked == true)
            {
                sperren = "0";  
            };
            string ds = "DS|" + nutzen;  
            string sperr = "MODE|" + sperren;  

            string rolls = "REF|"+roll_nr.Text;  
            string station = "ST|" + appSettings.Itac_StationID;  
            string eingabe = new string { station,  rolls, ds, sperr};
            string customErrorString = "";  
            string outargs = new string { };
            //string temp_roll_nr = (string) roll_nr;
            int result = imsAPI.customFunction(sessionContext, appSettings.Itac_CF, eingabe, out outargs, out customErrorString);
            roll_nr.Clear();
            string errorText = "";  
            textBox1.AppendText(customErrorString);
            var ts = DateTime.Now;
            var dr = tabelle.DataSource;
            dr.Rows.Add(  roll_nr.Text, ts );
           
            
           
           
            tabelle.DataSource.Rows.Add(dr);
          

        }
       




        private void roll_nr_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                textBox1.Clear();
                string rolls = "MAT|" + roll_nr.Text;  
                string station = "ST|" + appSettings.Itac_StationID;  
                string eingabe = new string { station, rolls };
                string customErrorString = "";  
                string outargs = new string { };
                //string temp_roll_nr = (string) roll_nr;
                int result = imsAPI.customFunction(sessionContext, appSettings.Itac_CF, eingabe, out outargs, out customErrorString);
                roll_nr.Clear();
                string errorText = "";  



                textBox1.AppendText(customErrorString);
            }
        }

        private void roll_nr_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                roll_nr.Clear();
            }
        }

        

        private void Exit_Click(object sender, EventArgs e)
        {
            {
                string error = "";  
                bool initialized = false;
                init = new IMS_Init_Demo.iTAC_Init(ref imsAPI, out sessionContext, out error, out initialized);
                string version;
                imsAPI.imsapiGetLibraryVersion(out version);
                textBox1.AppendText(version + "\r\n");  
                textBox1.AppendText("\r\n");  
                if (initialized)
                {
                    textBox1.AppendText("Serververbindung erfolgreich hergestellt!\r\n");  



                }
                else
                {
                    textBox1.AppendText(error);
                }
            }
        }

        private void Exit_Click_1(object sender, EventArgs e)
        {
           System.Environment.Exit(0);
            Application.Exit();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
           
        }
    }

}