الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حفظ بيانات dataGridView داخل جدول في Database

بدأه عبد الله ساعاتي في 20 أبريل 2010 · 13 رد · 7,621 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم اجمعين

عندي dataGridView1 مليئة ببيانات مؤخوذه من مصدر آخر (ليس من الداتا بيز)

وعندي داتا بيز بها جدول نفس تصميمdataGridView1

السوال :

اريد ان ادخل بيانات dataGridView1 داخل الجدول؟

فكرة :

عملت dataGridView2 يعرض فيها الجدول من نفس الداتابيز

وبعدين .......

dataGridView2.DataSource = dataGridView1.DataSource;

طيب وبعدين ..؟

هل من حل عند احد الاخوة ؟

وبارك الله فيكم وفي علمكم

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 21 أبريل 2010 في 01:18

#2

Up الموضوع مستعجلوله فنشوني من الشركة ^_^

#3

يمكن الحصول على جدول DataTable من الـ DataGridView هكذا :

        DataTable dt = new DataTable();
            dt = dataGridView1.DataSource as DataTable;

بعدها تصرف بالبيانات الموجودة داخل الجدول dt :

بدوارة أضف الصفوف إلى الجدول الأساسي في الداتا ست ثم إستدع دالة التحديث على قاعدة البيانات

..

#4

شكراً لك اخي على الرد

Desert_Eagle كتب:

بدوارة أضف الصفوف إلى الجدول الأساسي في الداتا ست ثم إستدع دالة التحديث على قاعدة البيانات

..

هل هذه تعليمة اضافة الصفوف dataGridView2.Rows.Add(dbPhoneDataSet1);

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 21 أبريل 2010 في 20:31

#5

لا تحتاج إلى dataGridView2 , أضف صفوف الجدول dt مباشرة إلى الجدول الموجود في الـ dataset الذي يحتوي على البيانات المأخوذة من الداتا بيز

بإفتراض أن ds هو الـداتا ست و Names هو إسم الجدول :

foreach(DataRow row in dt.Rows)
ds.Tables["Names"].Rows.Add(row);

..

#6

سلام عليكم

 	DataTable dt = new DataTable();
 	dt = dataGridView1.DataSource as DataTable;

 	//dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };

 	//dBPhoneDataSet.Tables.Add("ItemsTb");

 	foreach (DataRow row in dt.Rows)
 	{

 	dBPhoneDataSet.Tables["ItemsTb"].Rows.Add(row);
 	}

يا استاذ Desert Eaqle معليش ح اتعبك معايا تقدر تقول مبتدأ

بيعطني خطء في السطر الي داخل الـ foreach

يقول:

This row already belongs to another table

...؟؟

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 22 أبريل 2010 في 14:11

#7

استخدم أي طريقة نسخ و أسهلها ImportRow :

dBPhoneDataSet.Tables["ItemsTb"].ImportRow(row);
#8

استاذي الكريم اشكرك طولت بالك عليه ووجدت عن طريق البريك بوينت داخل watch انا DataRow موجود بها 6888 ( الي هيا عدد الاسطر داخل datagridview1 ) وبطريقة الي انتا علمتني هيا يذداد عدد الصفوف يعني يصير الدبل عملاً باني قد اخطات عندما لم اوضح من اين اتيت بالداتا قريد اتيت بيها من Excel عن طريق الكود

 private void button1_Click(object sender, EventArgs e) { //لقرائة من الاكسل على الداتا قريد try { System.Data.OleDb.OleDbConnection MyConnection; System.Data.DataSet DtSet; System.Data.OleDb.OleDbDataAdapter MyCommand; MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\\Documents and Settings\\vip\\My Documents\\Visual Studio 2008\\Projects\\WindowsFormsApplication1\\WindowsFormsApplication1\\bin\\Debug\\Test.xls';Extended Properties=Excel 8.0;"); MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection); MyCommand.TableMappings.Add("Table", "TestTable"); DtSet = new System.Data.DataSet(); MyCommand.Fill(DtSet); dataGridView1.DataSource = DtSet.Tables[0]; MyConnection.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }

وبكذا تطلعلي البيانات كلها على DataGridView1 وانا اعرف جملت الحفظ من التكست بوكس في ADO.NET لكن هل هناك ثم امر او جملة استعلام او اي شي يقوم بأدخال البيانات داخل التيبل وحفظها في اول مره فقط . وفي المرات القادمه عمل Update ولكم جزيل الشكر والعرفان

#9

استاذي الكريم اشكرك طولت بالك عليه

ووجدت عن طريق البريك بوينت داخل watch انا DataRow موجود بها 6888 ( الي هيا عدد الاسطر داخل datagridview1 )

وبطريقة الي انتا علمتني هيا يذداد عدد الصفوف يعني يصير الدبل

عملاً باني قد اخطات عندما لم اوضح من اين اتيت بالداتا قريد اتيت بيها من Excel عن طريق الكود

private void button1_Click(object sender, EventArgs e) 
{ 
//لقرائة من الاكسل على الداتا قريد 
try {
 System.Data.OleDb.OleDbConnection MyConnection; 
System.Data.DataSet DtSet; System.Data.OleDb.OleDbDataAdapter MyCommand; 
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\\Documents and Settings\\vip\\My Documents\\Visual Studio 2008\\Projects\\WindowsFormsApplication1\\WindowsFormsApplication1\\bin\\Debug\\Test.xls';Extended Properties=Excel 8.0;");

 MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
 MyCommand.TableMappings.Add("Table", "TestTable"); 
DtSet = new System.Data.DataSet();
 MyCommand.Fill(DtSet); dataGridView1.DataSource = DtSet.Tables[0];
MyConnection.Close();
 } catch (Exception ex)
 { MessageBox.Show(ex.ToString());
 } 
}

وبكذا تطلعلي البيانات كلها على DataGridView1

وانا اعرف جملت الحفظ من التكست بوكس في ADO.NET

لكن هل هناك ثم امر او جملة استعلام او من الـDataSet او الـ DataTable او اي شي يقوم بأدخال البيانات داخل التيبل

وحفظها في اول مره فقط . وفي المرات القادمه عمل Update

ولكم جزيل الشكر والعرفان

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 24 أبريل 2010 في 12:01

#10

لا أعرف يا أخي ما هو الهدف الأساسي من العملية , الذي فهمته أنك تريد نقل بيانات من ملف Excel إلى داتاجريد , ثم حفظها إلى جدول في قاعدة البيانات

لكن لا اعرف لماذا يحدث التكرار هل تحتاج لتكرار العملية أكثر من مرة ؟

إذا كان التكرار مهم لأي غرض , فيمكن أن تقوم بحذف جميع أسطر الجدول القديمة قبل أن تضيف الأسطر من جديد :

        dBPhoneDataSet.Tables["ItemsTb"].Rows.Clear();

        foreach (DataRow row in dt.Rows)
        {

        dBPhoneDataSet.Tables["ItemsTb"].Rows.Add(row);
        }

..

#11
Desert_Eagle كتب:

لا أعرف يا أخي ما هو الهدف الأساسي من العملية , الذي فهمته أنك تريد نقل بيانات من ملف Excel إلى داتاجريد , ثم حفظها إلى جدول في قاعدة البيانات

لكن لا اعرف لماذا يحدث التكرار هل تحتاج لتكرار العملية أكثر من مرة ؟

إذا كان التكرار مهم لأي غرض , فيمكن أن تقوم بحذف جميع أسطر الجدول القديمة قبل أن تضيف الأسطر من جديد :

        dBPhoneDataSet.Tables["ItemsTb"].Rows.Clear();

        foreach (DataRow row in dt.Rows)
        {

        dBPhoneDataSet.Tables["ItemsTb"].Rows.Add(row);
        }

..

استاذي الفاضل الكريم كيف اشكرك ؟

الله يجزيك الجنه

الموضوع كتالي

انا عندي برنامج كامل معمول بالفجول بيسك يدير المنشئة وبها شاشة تسجيل الاصناف

ولكن انا استخدم تسجيل الاصناف عن طريق Excel (لسهولة التجسيل)

والاصناف متجدده ومتغيرت كل يوم ف احتاج سحبها يومين الى التيبل الخاص بيها في SQL server (قاعدة بيانات البرنامج)

استخدمة اداة import & export الي تجي مع ال sql server بس فيها بعض الاخطاء في النقل ولاهي عاجبتني unsure.gif

فـ انا وصلت البيانات على الفورم وعرضتها داخل الداتا جريد باقي طريقة دخولها داخل التيبل ؟

فماهي الطريقة ؟ وهل هيا طريقة صحيحه ؟ ام ثما هناك طرق افضل برمجية ؟ اي نصائح ...

#12

طيب يا أخي لا داعي لتسجيل البيانات في الاكسل ثم نقلها إلى الداتاجريد

لماذا لا تسجلها مباشرة على الداتاجريد ؟ الداتاجريد يشبه الأكسل كثيراً وليست هناك أي صعوبة في إدخال البيانات منه

طريقتك في التسجيل على الأكسل ثم حفظها إلى الداتاجريد ثم من الداتاجريد إلى قاعدة البيانات , طريقة غير عملية أبداً

مثلاً إذا أردت تعديل بيانات صنف موجود مسبقاً ,يجب أن تأخذ بياناته من قاعدة البيانات إلى ملف إكسل ثم تعدلها ثم تعيدها إلى الداتاجريد ثم تحفظها في قاعدة البيانات , وفوق هذا كله سيحدق خطأ لأن الصنف موجود مسبقاً !!!

و لنفرض أن جميع الأصناف موجوده عندك في ملف إكسل , وأردت أن تعدل بيانت الصنف رقم 5 مثلاً , ودخل أحد المستخدمين إلى برنامج الفيجوال بيسك و عدل بيانات الصف رقم 5 أيضاً سيصبح للصنف نسختين لا تدري أيهما الأصح

حتى لو كانت طريقة الإدخال بالأكسل أسهل من الكتابة على الداتاجريد , تبقى طريقة غير عملية أي أن إحتمال حدوث أخطاء فيها مرتفع جداً

الأولوية هي صحة وإستقرار البرنامج وليس سهولة التعامل معه , فإذا كانت سهولة التعامل مع البرنامج تأتي على حساب ثبات وصحة الييانات فالأولى تركها

أضف البيانات في الداتاجريد مباشرة أسهل لك وللمستخدمين بكثير , واترك الأكسل في حاله

..

1
#13
Desert_Eagle كتب:

طيب يا أخي لا داعي لتسجيل البيانات في الاكسل ثم نقلها إلى الداتاجريد

لماذا لا تسجلها مباشرة على الداتاجريد ؟ الداتاجريد يشبه الأكسل كثيراً وليست هناك أي صعوبة في إدخال البيانات منه

طريقتك في التسجيل على الأكسل ثم حفظها إلى الداتاجريد ثم من الداتاجريد إلى قاعدة البيانات , طريقة غير عملية أبداً

مثلاً إذا أردت تعديل بيانات صنف موجود مسبقاً ,يجب أن تأخذ بياناته من قاعدة البيانات إلى ملف إكسل ثم تعدلها ثم تعيدها إلى الداتاجريد ثم تحفظها في قاعدة البيانات , وفوق هذا كله سيحدق خطأ لأن الصنف موجود مسبقاً !!!

و لنفرض أن جميع الأصناف موجوده عندك في ملف إكسل , وأردت أن تعدل بيانت الصنف رقم 5 مثلاً , ودخل أحد المستخدمين إلى برنامج الفيجوال بيسك و عدل بيانات الصف رقم 5 أيضاً سيصبح للصنف نسختين لا تدري أيهما الأصح

حتى لو كانت طريقة الإدخال بالأكسل أسهل من الكتابة على الداتاجريد , تبقى طريقة غير عملية أي أن إحتمال حدوث أخطاء فيها مرتفع جداً

الأولوية هي صحة وإستقرار البرنامج وليس سهولة التعامل معه , فإذا كانت سهولة التعامل مع البرنامج تأتي على حساب ثبات وصحة الييانات فالأولى تركها

أضف البيانات في الداتاجريد مباشرة أسهل لك وللمستخدمين بكثير , واترك الأكسل في حاله

..

هذا ما اكدته لرئيسي في العمل.. ولكنه مصر .. شكراً اخي على النصائح وبارك الله فيك

#14

طيب لو سمحتو

عندي استفسار

اللي فهمته من كلامكم اني اقدر استغني عن الاكسل واستبدلها بالداتا جريد صح ؟؟

اذا ممكن ابغى رابط يشرح لي الداتا قريد

او اذا فيه احد فاهم فيها ياليت يساعدني وشكرا

مواضيع مشابهة