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

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

بدأه نقطة بداية في 23 ديسمبر 2010 · 6 رد · 621 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي زرين وليبل

نكست وبريفيوس وليبل بينهم

كما في الصورة

أريد قراءة نص من الداتا بيس ووضعه في الليبل وقد قمت بذلك (أتعامل مع الآكسس)

الفكرة زر النكست والبريفيوس

أولا: النكست

مفترض لما نضغطه يغير النص يحط اللي يقرؤه من الداتا بيس النص (يعني السطر الثاني==> row التالي)

طيب حلو عملتها.....كل ماأضغط نكست يقرأ...لكن مرات أضغط ويطلع لي خطأ IndexOutOfRangeException was unhandledh

ما حل هذه المشكلة؟؟

ثانياً: البريفيوس

مفترض لما نضغطه يغير النص عكس طريقة النكست

لكن ما ضبطت معي

وهذه الميثودين

public int loop = 1;//use in next meyhod
public int loopPrev=0;//use in previous metod

private void Next_Click(object sender, EventArgs e)
{
ChildBehaviorMonitor ChildBehaveMonitor = new ChildBehaviorMonitor();
DataTable dt3 = ChildBehaveMonitor.SerachBehave();
numberOfRowsFeched = ChildBehaveMonitor.getnumberofresult();
if (numberOfRowsFeched > 0)
{
if (loop <= numberOfRowsFeched)
{

String data3 = dt3.Rows[loop][0].ToString();
Behave.TextAlign = ContentAlignment.MiddleCenter;
Behave.Text = data3;
}//end 2nd if
}//end if
loop++;

}

private void Previous_Click(object sender, EventArgs e)
{
ChildBehaviorMonitor ChildBehaveMonitor = new ChildBehaviorMonitor();
DataTable dt4 = ChildBehaveMonitor.SerachBehave();
numberOfRowsFeched = ChildBehaveMonitor.getnumberofresult();
if (numberOfRowsFeched > 0)
{
loopPrev = loop - 1;
if (loopPrev < numberOfRowsFeched)
{

String data4 = dt4.Rows[loopPrev][0].ToString();
Behave.TextAlign = ContentAlignment.MiddleCenter;
Behave.Text = data4;
}
}//end if
loopPrev--;
}//end Previous_Click method


نرجو المساعدة العاجلة وشكراً

post-226709-091459000 1293087764_thumb.p

post-226709-057420700 1293087807_thumb.p

post-226709-045861800 1293087859_thumb.p

post-226709-023841000 1293087878_thumb.p

المرفقات
ميثود البريفيوس.pngزري نكست وبريفيوس وليبل.pngميثود النكست.pngخطأ القراءة في ليبل.png
#2

عزيزي

قم باستخدام .count() بدلا من numberOfRowsFechedفهي افضل في الحالات المماثله

 dt3.Rows.Count()

تحياتي

تم تعديل هذه المشاركة بواسطة OsamaHosamEldeen في 23 ديسمبر 2010 في 12:30

#3
OsamaHosamEldeen كتب:

قم باستخدام .count() بدلا من numberOfRowsFechedفهي افضل في الحالات المماثله

 dt3.Rows.Count()

أخي من فضلك ...تستطيع أن تشرح لي بمثال

جربت ما ذكرت لكن لم تنجح معي

أصبح يقرأ سطرين فقط من الداتا بيس

يعني لما أضغط نكست يتغير وأضغط تاني يتغير لكن بعدها لا يتغير لو ضغطت نكست...يعني بس مرتين يتغير التكست في الليبل وبعدها ما يسوي شي

صحيح أنه أصبح الخطأ لا يظهر لي لكن النتيجة ليس كما أريد

أرجو المساعدة

وشكراً

#4

يعتمد على خرج الدالة SearchBehave() والتي لا اعرف محتواها ولا محتوى الكلاس التي تنتمي اليها بالكامل ولن استطيع افادتك الا لو وضعت كود الكلاس ChildBehaviourMonitor

تحياتي من القلب

#5

في الكلاس

هذه ميثودي ال SerachBehave و getnumberofresult

private static int numberOfRowsFeched;
    //------------------ Search behave-----------
        public DataTable SerachBehave()
        {
            OleDbConnection myConn = new OleDbConnection(strDSN);
            OleDbDataAdapter myCmd = new OleDbDataAdapter(strSQL, myConn);
            DataSet dtSet = new DataSet();
            dtSet.Clear();

            myCmd.SelectCommand.CommandText = "SELECT Behave FROM ChildBehaves";
            numberOfRowsFeched = myCmd.Fill(dtSet, "ChildBehaves");
            DataTable dt = dtSet.Tables["ChildBehaves"];
            return dt;
        } 

public int getnumberofresult()
        {
            return numberOfRowsFeched;
        }
#6
OsamaHosamEldeen كتب:

يعتمد على خرج الدالة SearchBehave() والتي لا اعرف محتواها ولا محتوى الكلاس التي تنتمي اليها بالكامل ولن استطيع افادتك الا لو وضعت كود الكلاس ChildBehaviourMonitor

أين ذهبت أخي الفاضل؟

بإمكانك المساعدة؟؟

#7

عزيزي

اتأسف لك لعدم مقدرتي على دخول المنتدى خلال الايام الماضية، ولكن ليس لدي الوقت الكافي لعمل مثال واعطاؤه لك ، اريدك فقط ان تعرف اخطائك وقم بتجنبها عند كتابتك للكود

1- الخطأ الأول: هو انك تقوم باستدعاء كل محتويات الجدول ChildBehaves كل مرة تضغط فيها "تالي " او "سابق" ، غير صحيح بالمرة حيث يجب ان تفعله مرة واحدة خلال برنامجك وان تكون DataTableواحدة وعامة public تجنب استخدام متغيرين dt3 و dt4 استخدم واحد فقط مثلا dt وقم باستخدام DataTable dt= ChildBehaveMonitor.SerachBehave(); مرة واحدة فقط في برنامجك ، مثلا خلال تحميل الفورم

2- الخطأ الثاني: هو انك تقوم بتعريف متغيرين loop , loopPrev والحقيقة انه يجب ان تستخدم واحد فقط loop مثلا ، وتقوم بانقاصه عند الضغط "السابق" وتقوم بزيادته عند ضغط "التالي"

3- الخطأ الثالث: قم بتعديل SearchBehave لتكون كالتالي

private static int numberOfRowsFeched;
    //------------------ Search behave-----------
        public DataTable SerachBehave()
        {
            OleDbConnection myConn = new OleDbConnection(strDSN);
            OleDbDataAdapter myCmd = new OleDbDataAdapter(strSQL, myConn);
            DataSet dtSet = new DataSet();
            dtSet.Clear();

            myCmd.SelectCommand.CommandText = "SELECT Behave FROM ChildBehaves";
             myCmd.Fill(dtSet, "ChildBehaves");
    DataTable dt = dtSet.Tables["ChildBehaves"];
numberOfRowsFeched =dt.Rows.Count(); 
            return dt;
        } 

public int getnumberofresult()
        {
            return numberOfRowsFeched;
        }

حاول تجربه ما قلته لك وان لم تنفع قم باخباري

تحياتي

تم تعديل هذه المشاركة بواسطة OsamaHosamEldeen في 25 ديسمبر 2010 في 13:45

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…