منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : نقل بيانات من فورم لاخر
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله 

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

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


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

// 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;

           }
اخي العزيز اعمل كلاس جديد و لتسميه : 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(); 

و الله الموفق .
(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(); 

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


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

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