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

الاستعلام من قاعدة البيانات في جدول

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

الأخوة الأحبة السلام عليكم ورحمة الله وبركاته

هل هناك امكانية لجلب البيانات من قاعدة البيانات في جدول

انا مبرمج انترنت وعندما نريد جلب بيانات أو عرض محتويات جدول يكون الأمر كالتالي:

while(query){

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

}

بمعني لو اني عندي مثلا في قاعدة البيانات جدول اسمه email

وفيه الحقول id,name,email

كيف أريدها أن تتكرر في صفوف جدول وليس داتا ست

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

وجزاكم الله كل الخير

#2

وعليكم السلام ورحمة الله وبركاته

نعم اخي بالطبع، لكن فقط اخبرنا بقاعدة البيانات التي تعمل بها واخبرك بالطريقة بإذن الله

لكن الطريقة العامة بتكون اولاً بعمل الـ Connection ثم عمل الـ Command وهو عبارة عن الاستعلام الذي يتم تنفيذه، ثم تنفيذ الـ Command والحصول على البيانات باستخدام الـ DataAdapter ثم قراءة البيانات منه

ويتم الدوران مع قيم الـ dataAdapter كما هو الحال مع لغات الويب كالـ php

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

مبرمج بشركة www.ScalWeb.Com

#3

انا اعمل على قاعدة بينات mysql

هذا رابط الاتصال

        string connStr = "server=localhost;user=root;database=db;port=3306;password=root;";

            MySqlConnection savecon1 = new MySqlConnection(connStr);
            MySqlCommand savecom1 = new MySqlCommand("select * from emails", savecon1);
            savecon1.Open();

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

#4

للرفع

#5

إستخدم MySqlDataReader وتأكد من إغلاقة بعد العملية

            MySqlDataReader reader = savecom1.ExecuteReader();
            while (reader.Read())
            {
                MessageBox.Show(reader["id"].ToString());
                MessageBox.Show(reader["name"].ToString());
                MessageBox.Show(reader["email"].ToString());
            }
            reader.Close();
            savecom1.Dispose();
#6

أخي الكريم كل الشكر لك

اعرف هذه المعلومات لكن ما أريده كالتالي :

 while (reader.Read())            {  

       يتم هنا اضافة سطر جديد في الجدول واضافة البيانات المطلوبة فيه

      }
#7

إضافة سطر أم صف ؟

ما نوع "الجدول" الذي تريد إضافة "سطر" جديد فيه ؟ هل تقصد جدول رسومي GridView على صفحة ويب ؟ أم كلاس جدول DataTable ؟

إذا كنت تقصد كلاس DataTable , يمكن إضافة البيانات إليه بإستخدام تعليمة واحدة بدون الحاجة لدوارة while :

DataTable dt=new DataTable();
dt.Load(reader);

وإذا اردت ربطها بجدول رسومي DataGridView اضف :

dataGridView1.DataSource=dt;

..

#8

أخي الكريم بحثت ويبدو انه لا توجد طريقة لهيك شي

سؤال آخر

طريقتك السابقة تعبيء كامل البيانات في الجاتا جريد فيو

لو أـردت مثلا ان اجلب حقلين فقط من قاعدة البيانات مثلا id ,name وليس كل الحقول ما الطريقة لذلك؟؟

ولك كل الشكر

#9

غير نص الإستعلام :

MySqlCommand savecom1 = new MySqlCommand("select id,name from emails", savecon1);

أو غير خاصية AutoGenerateColumns في الداتاجريد إلى false

ثم أضف الأعمدة Columns التي تحتاج إليها فقط

والطريقة الأولى أفضل في الأداء واستهلاك موارد الشبكة لأنها تستدعي فقط البيانات التي ستستخدمها

أما الثانية فهي تستدعي جميع البيانات - بما فيها بيانات لن تحتاج إلى استخدامها - ولا تظهر إلا ما تحتاجه

بالمناسبة , خاصية AutoGenerateColumns لا تظهر في الـ Designer غيرها من الكود

..

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

#10

جزاك الله خير

لو أردت مثلا ان أضيف عمود امام كل صف وبه مثلا زر حذف او زر تعديل يحولني الى فورم جديد ويحمل الزر بيانات كid ,مثلا

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

#11

أضف عمود من نوع Button وغير خاصية CommandName إلى أي شيء تريده , مثلاً "GO"وإلتقط حدث RowCommand في الداتاجريد :

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if(e.CommandName=="GO")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = ContactsGridView.Rows[index];
        //Do Somthing With row.Cells["id"].Text;
    }
}
#12

أخي الكريم ممكن تشرحلي الكود؟؟

#13

عندما يتم النقر على خلية من نوع Button في الداتاجريد , فإن حدث RowCommand ينطلق حاملا الباراميتر e

e يحتوي على خاصية CommandArgument تمثل index الصف الذي تم النقر عليه , فمثلاً لو تم النقر على الصف الثاني فإن CommandArgument ستكون 1 والثالث ستكون 2

عندما نحصل على index يعني أنا عرفنا الصف الذي تم النقر عليه ContactsGridView.Rows[index];

بإفتراض ContactsGridView هو إسم الداتاجريد

ومن هذا الصف يمكن أن نحصل على قيمة أي خلية

أما الخاصية CommandName فنستخدمها لمعرفة العمود الذي تم النقر عليه , فمثلاً لو كان هناك داتاجريد فيه عمودين من نوع زر , يجب أن نغير الـ CommandName لكل عمود

..

#14

CommandArgument يأتي تحتها خط احمر مع العلم أني اعمل على 2010

err_1272097749.gif

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

#15

للأسف لا أملك 2010 لكن الـ MSDN تقول أن الخصائص موجودة أيضاُ على .Net 4

حاول ان تذهب إلى خصاص الداتاجريد من التصميم , ثم إلى الأحداث , وتنقر مزدوجاً على الحدث RowCommand

حتى يتم إضافة فضاء الأسماء المطلوب , وتنتقل آلياً إلى الكود

ثم تنسخ بقية الشفرة :

    if(e.CommandName=="GO")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = ContactsGridView.Rows[index];
        //Do Somthing With row.Cells["id"].Text;
    }

أو ابحث عن فضاء الأسماء الناقص , من خلال القائمة الصغيرة التي تظهر في أول الكلمة الي تحتها خط

..

#16

اخي الكريم بعد البحث والتجريب وصلت للكود التالي اتمنى الجميع يستفيد منه

        private void dg1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {


            if (e.ColumnIndex == dg1.Columns["edit"].Index)
            {

           هنا الكود
            }
            if (e.ColumnIndex == dg1.Columns["del"].Index)
            {
                هنا الكود
            }
        }

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