تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[C#.NET] نقل بيانات من فورم لاخر
#1
السلام عليكم ورحمة الله 

قمت بعمل واجهات بسيطة الواجهة الرئيسية يوجد بيها انظارات ويوجد ليبل لعرض عدد الانذارات ويظهر اذا كانت هناك انظارات متاحة او يختفي ان لم يوجد.

اذا تم تنفيذ الكود من واجهة لاخري مباشرتا تتم العملية بدون مشاكل ولكن اذا كان هنا ك بين الفورم الرئيسي والفرعي اكتر من فورم واردت تشغيل الكود لايظهر شيء كان ليس هناك كود .
حتي ان وضعت الكود ببوتن الغلق لم يتم اي شيء بالكود .
الداتا تابل تم وضعها بالكلاس الرئيسي لاستدعاؤها بكل الواجهات.


كود :
الداتا تابل تم وضعها بالكلاس الرئيسي لاستدعاؤها بكل الواجهات//

// public static DataTable DTLOGALARM = new DataTable();//


MAIN MAIN = new MAIN();

           if (MAINCODEB.DTLOGALARM.Rows.Count > 0)
           {
               MAIN.LAB_ALARMQOUT.Visible = true;
               MAIN.LAB_ALARMQOUT.Text = MAINCODEB.DTLOGALARM.Rows.Count.ToString();
           }
           else
           {
               MAIN.LAB_ALARMQOUT.Visible = false;

           }
الرد
تم الشكر بواسطة:
#2
اخي العزيز اعمل كلاس جديد و لتسميه : ConnectionStringXT

ثم ضع الاكواد التالية هذه الاكواد للتعامل مع قواعد البيانات من نوع اكسيس تستطيع تعديلها لتناسب نوع قواعد البيانات الذي تعرفه :

كود :
   #region DatabaseThing
   public OleDbConnection cn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\MyDatabase.accdb;Jet OLEDB:Database Password=;");
   public DataTable FillDT(string StrSQL)
   {
       DataTable dt = new DataTable();
       OleDbDataAdapter da = new OleDbDataAdapter(StrSQL, cn);
       if (cn.State == ConnectionState.Closed)
       {
           cn.Open();
       }
       da.Fill(dt);
       if (cn.State == ConnectionState.Open)
       {
           cn.Close();
       }
       return dt;
   }
   public void ExecuteNonQueryXT(string SqlStr)
   {
       OleDbCommand cmd = new OleDbCommand(SqlStr, cn);
       if (cn.State == System.Data.ConnectionState.Closed)
       {
           cn.Open();
       }
       cmd.ExecuteNonQuery();
       if (cn.State == System.Data.ConnectionState.Open)
       {
           cn.Close();
       }
   }
   public void FillComboBox(ComboBox Cmb, string SqlStr, string Col, string ValX)
   {
       DataTable dt = new DataTable();
       dt = FillDT(SqlStr);
       Cmb.DataSource = dt;
       Cmb.DisplayMember = Col;
       Cmb.ValueMember = ValX;
   }
   public int MaxID(string IDColum, string TableName)
   {
       int ID = 0;
       string StrSQL = "Select IIF(Max(" + IDColum + ") Is NULL,1,Max(" + IDColum + ")+1)As ID From " + TableName;
       ID = Convert.ToInt32(FillDT(StrSQL).Rows[0]["ID"].ToString());
       return ID;
   }
   #endregion
و عند الفورم التي تريد ان تعرض فيه عدد السجلات ضع السطر التالي في حدث اللود :

PHP كود :
ConnectionStringXT cls = new ConnectionStringXT();
LAB_ALARMQOUT.Text=cls.FillDT("Select * From ProductsTable").Rows.Count.ToString(); 

و الله الموفق .
الرد
تم الشكر بواسطة: waw , ابراهيم ايبو
#3
(09-09-21, 05:33 PM)asemshahen5 كتب : اخي العزيز اعمل كلاس جديد و لتسميه : ConnectionStringXT

ثم ضع الاكواد التالية هذه الاكواد للتعامل مع قواعد البيانات من نوع اكسيس تستطيع تعديلها لتناسب نوع قواعد البيانات الذي تعرفه :

كود :
   #region DatabaseThing
   public OleDbConnection cn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\MyDatabase.accdb;Jet OLEDB:Database Password=;");
   public DataTable FillDT(string StrSQL)
   {
       DataTable dt = new DataTable();
       OleDbDataAdapter da = new OleDbDataAdapter(StrSQL, cn);
       if (cn.State == ConnectionState.Closed)
       {
           cn.Open();
       }
       da.Fill(dt);
       if (cn.State == ConnectionState.Open)
       {
           cn.Close();
       }
       return dt;
   }
   public void ExecuteNonQueryXT(string SqlStr)
   {
       OleDbCommand cmd = new OleDbCommand(SqlStr, cn);
       if (cn.State == System.Data.ConnectionState.Closed)
       {
           cn.Open();
       }
       cmd.ExecuteNonQuery();
       if (cn.State == System.Data.ConnectionState.Open)
       {
           cn.Close();
       }
   }
   public void FillComboBox(ComboBox Cmb, string SqlStr, string Col, string ValX)
   {
       DataTable dt = new DataTable();
       dt = FillDT(SqlStr);
       Cmb.DataSource = dt;
       Cmb.DisplayMember = Col;
       Cmb.ValueMember = ValX;
   }
   public int MaxID(string IDColum, string TableName)
   {
       int ID = 0;
       string StrSQL = "Select IIF(Max(" + IDColum + ") Is NULL,1,Max(" + IDColum + ")+1)As ID From " + TableName;
       ID = Convert.ToInt32(FillDT(StrSQL).Rows[0]["ID"].ToString());
       return ID;
   }
   #endregion
و عند الفورم التي تريد ان تعرض فيه عدد السجلات ضع السطر التالي في حدث اللود :

PHP كود :
ConnectionStringXT cls = new ConnectionStringXT();
LAB_ALARMQOUT.Text=cls.FillDT("Select * From ProductsTable").Rows.Count.ToString(); 

و الله الموفق .


بشكر حضرتك علي الرد المشكلة مش في قاعدة البيانات او الاستعلام المشكلة حضرتك في اظهار او اخفاء ليبل بالفورم قبل الاخير
الرد
تم الشكر بواسطة: ابراهيم ايبو , ابراهيم ايبو
#4
اعتقد المشكله في انك تعمل في كل واجهه
new DataTable
فتتسبب في ضياع البيانات السابقه

اذا انت عامل في الكلاس الرئيسي
public static DataTable dt = new DataTable();
فلا تعمل لها new بعد ذلك الا اذا كنت فعلا لا تريد البيانات السابقه
الرد
#5
عرف متغيير من نوع بولين و من ثم استد له القيمة في الفورم الاول و ضعه على الخاصية Visible في حدث اللود او ضع متغيير في السيتنغ من نوع بولين و احفظه حسب الشرط و استدعه عند حدث اللود و الله الموفق .
الرد
تم الشكر بواسطة: محمد اسماعيل , ابراهيم ايبو



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم