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

مساعده في اظهار صوره

بدأه ميولي برمجي في 17 نوفمبر 2013 · 13 رد · 544 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اريد اظهار صوره اذا كان حقل IsActive يساوي 2 ممكن مساعده في الكود وشكرا

  string str = "select Id,TitleAr, from Offer  where ([IsActive] = @IsActive) ";
            SqlCommand cmd = new SqlCommand(str, con);
           
                cmd.Parameters.AddWithValue("@IsActive", 2);
                
                    Image1.Visible = true;
#2

AddWithValue ترجع Object  من نوع SqlParameter.

1. إذا كان لا يساوي [null] بالتالي [isActive =2] تنفذت بشكل صحيح، عندها نظهر الصورة.

           if( cmd.Parameters.AddWithValue("@IsActive", 2) !=null)
           {
               Image1.Visible = true;
           }
1

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#3

 كتبت الكود السابق ظهرت لي رساله الخطا التاليه    An object reference is required for the non-static field, method, or property 'System.Web.UI.Control.Visible.get مالحل
 

#4

تحدث هذه الأخطاء في حالات استدعاء [non-static method] أو [non-static property]، ضمن [static method].

 

 

أي نحن نقوم بالتعامل مع الخاصية [image.Visible]، والتي ليست [static]، ضمن ميثود [static]. الحل هنا بإزالة كلمة static من تعريف الميثود.

 

إذا لم ينفع هذا الحل، فعليك بتعريف [object] من العنصر المطلوب،[image]، ضمن تلك الميثود. ثم طلب الخاصية [image.Visible=true].

 

بالتوفيق.

1

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#5

ممكن تكتبلي مثال لو تكرمت على تعريف الobject

#6

إذا في مجال، ارفقي الصفحة كاملة مع الكود، لحتى نحدد المشكلة والحل. بكون أفضل.

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#7

Comp.aspx.cs في المرفق صفحه الكود

#8

أختي الكريمة:

جربت جزء الكود الخاص بإظهار الصورة، اشتغل بدون أي مشاكل. لكن بدل التحقق من [cmd.Parameters.AddWithValue]، التي لا تتصل بقاعدة البيانات، تحققت من [da.Fill] والتي ترجع عدد الأسطر المتأثرة بالإستعلام. لكن المشكلة ليست هنا!  فالكود الذي ارسلته غير واضح المعالم.

 

لاحظت أن التعامل مع قاعدة البيانات يتم على عدة مستويات، فمرة [LINQ] ومرة [DataSet]، ومرة اتصال مباشر [sqlConnection]. أنا انصحك بالتعامل مع طبقة بيانات وحدة [Data Access Layer].

   1. إما [DataSet]، تضيفها للمشروع كعنصر جديد وتعرفي فيها الجداول [TableAdapter] المطلوبة، وتعرفي أيضاً الـ [querys] المطلوبة وبإمكانك طلبها لاحقا كَ [Methods] وبالتالي لا يحدث هذا الخلط بين طبقات المشروع.

   2. أو [LINQ to SQL Classes]، والتي تشبه [DataSet] من حيث التصميم، لكن يتم عمل الـ [queris] من خلال [LINQ]. 

   3. أو [Entity Framework Model]، وهو أفضل أنواع الربط مع قواعد البيانات.

 

كل ذلك كي نتجنب الأخطاء الناتجة عن الخلط الحاصل مسبقاً.

جربي هذا التعديل. 

    .....
            cmd.Parameters.AddWithValue("@IsActive", 2);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            int rows = da.Fill(ds);
            if (rows > 0)
            {
                Image1.Visible = true;
            }
            .......

بالتوفيق.

1

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#9

شكرا لك اخي على التوضيح , جربت الكود السابق مازالت نفس رساله الخطأ An object reference is required for the non-static field, method, or property 'System.Web.UI.Control.Visible.get

#10

أختي الكريمة.

 

جربي عمل صفحة جديدة تحوي فقط على الصورة والزر. وجربي عمل query السابقة، وعندها.

1. إذا اشتغلت الصفحة. فتأكدي أن المشكلة في قلب الصفحة السابقة، 

2. إذ كانت المشكلة لا تزال، فالمشكلة الأساسية في مكتبات الـ NET.

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#11

اشتغل معي هاذا الكود

 protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            string connn = ConfigurationManager.ConnectionStrings["GenericConnectionString"].ConnectionString;
            SqlConnection con = new SqlConnection(connn);
            con.Open();
            string str = "select Id,TitleAr from Offer where  ([IsActive] = @IsActive)";
            SqlCommand cmd = new SqlCommand(str, con);


            SqlDataAdapter da = new SqlDataAdapter(cmd);

            if (cmd.Parameters.AddWithValue("@IsActive", 2) != null)
            {
                ((System.Web.UI.WebControls.Image)e.Item.FindControl("Image1")).Visible = true;

            }
            
        }

لكن يظهر الصوره على جميع العناصر وانا اريدها ان تظهر فقط عندما IsActive يساوي 2

#12

نعم أختي الكريمة،

كما أخبرتك فإن الميثود [cmd.Parameter.AddWithValue]، تعمل بوضع مفصول عن قاعدة البيانات [Disconnected from database]، أي عند طلبها لا يحدث اتصال او جلب للبيانات من قاعدة البيانات، لذلك يبقى الشرط محقق دائما، لذلك  أخبرتك بأن تضعي الشرط على ميثود تعبئة [DataSet]، حيث عند طلب [Fill]، تقوم بالإتصال بقاعدة البيانات، وفي حال كان قيمة المتغير [isActive = 2] موجودة ضمن الجدول، فإنه سيرجع عدد من الأسطر من ذلك الجدول، إذا لم يكن هناك اي حقل يحوي هذه القيمة فيتم تعبة الـ [DataSet] ب 0 سطر، اي تبقى فارغة، لذلك نفحص الشرط كالتالي:

DataSet ds = new DataSet();
            int rows = da.Fill(ds);
            if (rows > 0)
            {
                Image1.Visible = true;
            }

المتغير [rows]، هو من يحدد عدد الأسطر الواردة من قاعدة البيانات.

 

بالتوفيق.

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#13

 جربت ماقلته لي الخطا في هاذا السطر فقط لنفس الرساله

 {Image1.Visible = true;}
#14

اقصد به ان السطر الذي كتبته انت.

System.web.Ui.Image........

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

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