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

[تنبيه - عنوان غير مناسب : ]خطأ برمجي

بدأه -الأمل- في 14 يونيو 2011 · 23 رد · 946 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ..عندي مشكلة في كود التحويل من object إلى datetime

post-240687-023845400 1308040416_thumb.p

هذا الكود

   string[] colors = new string[] { "navy", "maroon", "orange" };
    //DataTable dt = new DataTable();
    public string dateHeader;
    DateTime dtMin, dtMax;
    int dateSpan;
    int count = 0;
   // string[] colors = new string[] { "navy", "maroon", "orange" };
    protected void Page_Load(object sender, EventArgs e)
    {
      string pr=Request.QueryString["pr_Id"];
      SqlConnection SqlConnection1 = new SqlConnection();
      SqlConnection1.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;
      SqlDataAdapter sub = new SqlDataAdapter();
     DataTable custDS = new DataTable();
      SqlCommand selectCMD = new SqlCommand("SELECT Subproject_Name,date_Start,date_end FROM Subprojects where Project_Id=" + pr, SqlConnection1);
      sub.SelectCommand = selectCMD;
      SqlConnection1.Open();
      sub.Fill(custDS);
      SqlConnection1.Close();
      rpt.DataSource = custDS;
      rpt.DataBind();
       // buildData(); // make your dt
        //get min and max dates (or whatever you choose to use)
      dtMin = (DateTime)(from p in custDS.AsEnumerable() select p["date_start"]).Min();
      dtMax = (DateTime)(from p in custDS.AsEnumerable() select p["date_end"]).Max();
        dateSpan = (dtMax - dtMin).Days;

        dateHeader = "<span style=\"float:left;\">" + dtMin.ToShortDateString() + "</span><span style=\"float:right;\">" + dtMax.ToShortDateString() + "</span>";


        //displays the test data in table format
        //GridView gv = new GridView();
        //gv.DataSource = dt;
        //gv.DataBind();
        //form1.Controls.Add(gv);
    }

    public string doGantt(object sub, object start_sub, object end_sub)
    {
        string title_sub = (string)sub;
        DateTime start = (DateTime) start_sub;
        DateTime end = (DateTime)end_sub;
        int numberOfDays = (end - start).Days;
        int startDivAt = (start - dtMin).Days > 0 ? (start - dtMin).Days * 100 / dateSpan : 0;
        int howWide = end != dtMax ? ((end - start).Days + 1) * 100 / dateSpan : (end - start).Days * 100 / dateSpan;
        count++;
        return "<div class=\"gantt\" style=\"background:" + colors[count % colors.Count()] + ";width:" + howWide + "%;margin-left:" + startDivAt + "%;\">  " + title_sub + "</div>";
    }
المرفقات
232.png

تم تعديل هذه المشاركة بواسطة -الأمل- في 14 يونيو 2011 في 16:02

#2

خلاص شكراً حليت مشكلة التاريخ كدا:

DateTime start =Convert.ToDateTime(start_sub);

DateTime end = Convert.ToDateTime(end_sub);

#3
      public string doGantt(object sub, object start_sub, object end_sub)
    {
        string title_sub = (string)sub;

        DateTime start = Convert.ToDateTime(start_sub);
        DateTime end = Convert.ToDateTime(end_sub);
        int numberOfDays = (end - start).Days;
        int startDivAt = (start - dtMin).Days > 0 ? (start - dtMin).Days * 100 / dateSpan : 0; المشكلة في هذا الكود إذا كانت التاريخ start=3/6,,dtMin=3/6,,....فإنه ناتج عملية هذا السطر من الكود=0
        int howWide = end != dtMax ? ((end - start).Days + 1) * 100 / dateSpan : (end - start).Days * 100 / dateSpan;
        count++;
        return "<div class=\"gantt\" style=\"background:" + colors[count % colors.Count()] + ";width:" + howWide + "%;margin-left:" + startDivAt + "%;\">  " + title_sub + "</div>";
    }

يظهر خطأ في هذا السطرint startDivAt = (start - dtMin).Days > 0 ? (start - dtMin).Days * 100 / dateSpan : 0;

ر سالة الخطأ ...جرت محاولة للقسمة على صفر.

#4

كما هو مذكور. هناك قسمة على صفر. أي أن dateSpan تساوي صفر. اعمل debug وراجع كودك

#5

ايوا صح عملت ديبج وطلعت بصفر...بس ليه ؟؟ المفروض datespan تكون قيمتها 37

هذا الكود اتمنى المساعدة في تصحيحه

public partial class gantt : System.Web.UI.Page
{ 
    //SqlConnection sql = new SqlConnection();


    //string query = "SELECT [Subproject_Name], [date_start], [date_end] FROM [Subprojects]";
  //  DataTable subproject = new DataTable();
   // public string dateHeader;
    //DateTime dtMin, dtMax;
   // int datespan;
   // int count = 0;
    string[] colors = new string[] { "navy", "maroon", "orange" };
    //DataTable dt = new DataTable();
    public string dateHeader;
    DateTime dtMin, dtMax;
    int dateSpan;
    int count = 0;
   // string[] colors = new string[] { "navy", "maroon", "orange" };
    protected void Page_Load(object sender, EventArgs e)
    {
      string pr = Request.QueryString["pr_Id"];
      SqlConnection SqlConnection1 = new SqlConnection();
      SqlConnection1.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;
      SqlDataAdapter sub = new SqlDataAdapter();
     DataTable custDS = new DataTable();
      SqlCommand selectCMD = new SqlCommand("SELECT Subproject_Name,date_Start,date_end FROM Subprojects where Project_Id=" + pr, SqlConnection1);
      sub.SelectCommand = selectCMD;
      SqlConnection1.Open();
      sub.Fill(custDS);
      SqlConnection1.Close();
      rpt.DataSource = custDS;
      rpt.DataBind();
       // buildData(); // make your dt
        //get min and max dates (or whatever you choose to use)
      dtMin = (DateTime)(from p in custDS.AsEnumerable() select p["date_start"]).Min();
      dtMax = (DateTime)(from p in custDS.AsEnumerable() select p["date_end"]).Max();
        dateSpan = (dtMax - dtMin).Days;

        dateHeader = "<span style=\"float:left;\">" + dtMin.ToShortDateString() + "</span><span style=\"float:right;\">" + dtMax.ToShortDateString() + "</span>";
        Label1.Text = dateSpan.ToString();

        //displays the test data in table format
        //GridView gv = new GridView();
        //gv.DataSource = dt;
        //gv.DataBind();
        //form1.Controls.Add(gv);
    }

    public string doGantt(object sub, object start_sub, object end_sub)
    {
        string title_sub = (string)sub;

        DateTime start = Convert.ToDateTime(start_sub);
        DateTime end = Convert.ToDateTime(end_sub);
        int numberOfDays = (end - start).Days;
        int startDivAt = (start - dtMin).Days > 0 ? (start - dtMin).Days * 100 / dateSpan : 0;
        int howWide = end != dtMax ? ((end - start).Days + 1) * 100 / dateSpan : (end - start).Days * 100 / dateSpan;
        count++;
        return "<div class=\"gantt\" style=\"background:" + colors[count % colors.Count()] + ";width:" + howWide + "%;margin-left:" + startDivAt + "%;\">  " + title_sub + "</div>";
    }
#6

لا أرى شيئاً في الكود. وأنت تعمل debug ضع القيم dtMin و dtMax و dtMax - dtMin في الـwatch وانظر كيف تخرج.

#7

أخي الكريم عملت ديبج طلعت المشكلة إنه اصلاً لايملئ datatable منdataadapter

      string pr = Request.QueryString["pr_Id"];
      SqlConnection SqlConnection1 = new SqlConnection();
      SqlConnection1.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;
      SqlDataAdapter sub = new SqlDataAdapter("SELECT Subproject_Name,date_Start,date_end FROM Subprojects where Project_Id="+pr, SqlConnection1); ;
     DataTable custDS = new DataTable();
     // SqlCommand selectCMD = new SqlCommand("SELECT Subproject_Name,date_Start,date_end FROM Subprojects where Project_Id=" + pr, SqlConnection1);
      //sub.SelectCommand = selectCMD;
      SqlConnection1.Open();
      sub.Fill(custDS);
      SqlConnection1.Close();
      rpt.DataSource = custDS;
      rpt.DataBind();

تم تعديل هذه المشاركة بواسطة -الأمل- في 14 يونيو 2011 في 21:38

#8

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

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

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

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

طيب إن شاء الله

#10

أتوفع لديك مشكلة في تكوين جملة الاستعلام إذن. انظر ما بداخل SqlDataAdapter.SelectCommand وفي الغالب ستجد المشكلة هناك

#11

غيرت جملة الإستعلام إلى

     SqlDataAdapter sub = new SqlDataAdapter("SELECT Subproject_Name,date_Start,date_end FROM Subprojects where Project_Id="+pr, SqlConnection1); ;
     DataTable custDS = new DataTable();   
  SqlConnection1.Open();
      sub.Fill(custDS);
      SqlConnection1.Close();
      rpt.DataSource = custDS;
      rpt.DataBind();

يعطيني خطأ في دا السطر: sub.Fill(custDS);

#12

طيب ما هو الخطأ؟

أنا عبقري ولكنني لا أستطيع قراءة الأفكار أو رؤية الأشياء من بعد :lol:

#13

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

اختي هل انتي متأكده ان هناك مشاريع فرعيه برقم المشروع الذي يأتي من ال QueryString؟ واذا كانت اجابتك نعم ممكن ترفقي كود تعبئة الجدول والحساب كاملا ليتم النظر فيه؟

.:: Wish to become better and better ::.

#14
iProject.rarايوا متأكدة اضفتهم بنفسي
#15

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

اختي المشكله في تنسيق النص هنا


dtMin = (DateTime)(from p in custDS.AsEnumerable() select p["date_start"]).Min();
dtMax = (DateTime)(from p in custDS.AsEnumerable() select p["date_end"]).Max();

وكذلك قومي بتأخير ال Bind بعد حساب الفرق والا سوف يؤدي الي قيمة صفر مما يجعلة القسمة امرا مستحيلا!!

.:: Wish to become better and better ::.

#16
   var Min = (from p in custDS.AsEnumerable()
                   select p["date_start"]).Min();

      var Max = (from p in custDS.AsEnumerable()
                 select p["date_end"]).Min();

 dateSpan = (Convert.ToDateTime( Max) - Convert.ToDateTime( Min)).Days;

dateHeader = "<span style=\"float:left;\">" + dtMin.ToShortDateString() + "</span><span style=\"float:right;\">" + dtMax.ToShortDateString() + "</span>";
        rpt.DataSource = custDS;
        rpt.DataBind();

طيب شكراً تم التعديل كما وضحت... لكن repeater لا يأخذ قيمة حقول أول صف يبدأ من الصف الثاني؟

في مشكلة في الدالة الأخرى

    public string doGantt(object sub, object start_sub, object end_sub)
    {
        string title_sub = (string)sub;
       DateTime start =Convert.ToDateTime(start_sub);
        DateTime end =Convert.ToDateTime(end_sub);
        int numberOfDays = (end - start).Days;
        int startDivAt = (start - dtMin).Days > 0 ? (start - dtMin).Days * 100 / dateSpan : 0;
        int howWide = end != dtMax ? ((end - start).Days + 1) * 100 / dateSpan : (end - start).Days * 100 / dateSpan;
        count++;
        return "<div class=\"gantt\" style=\"background:" + colors[count % colors.Count()] + ";width:" + howWide + "%;margin-left:" + startDivAt + "%;\">  " + title_sub + "</div>";
    }

في سطر

DateTime start =Convert.ToDateTime(start_sub);

الخطأ: لم يتعرف على السلسلة date time كقيمة صالحة .... وفي هذا السطر تم تخزين قيمة إفتراضية للتاريخ.... و يحفظ التاريخ والوقت..

تم تعديل هذه المشاركة بواسطة -الأمل- في 16 يونيو 2011 في 01:59

#17

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

تأكدي من تنسيق التاريخ للمتغير start_sub فمن المؤكد انه لايطابق تنسيق تاريخ الجهاز!!

.:: Wish to become better and better ::.

#18

ايوا غيرت نوع تاريخ الجهاز إلى date time....وغيرت الكود اللي فوق خليته كدا:

      dtMin = Convert.ToDateTime(from p in custDS.AsEnumerable() select p["date_start"]).Min;
      dtMax = Convert.ToDateTime(from p in custDS.AsEnumerable() select p["date_end"]).Max();

.Min أقصد فيها يحصل على أقدم تاريخ بداية من بين كل الصفوف....

.Max أقصد فيها يحصل على أكبر تاريخ انتهاء مهمة من بين كل الصفوف...

المشكلة إنه لايتعرف على هذة الدوال

مع العلم أن dtMin,,,,,dtMax من نوع datetime؟؟؟ماهي المشكلة

#19

خلاص عملت زي كدا واتعرف على الدوال

dtMin = (DateTime)(from p in custDS.AsEnumerable() select p["date_start"]).Min();

dtMax =(DateTime)(from p in custDS.AsEnumerable() select p["date_end"]).Max();

تم تعديل هذه المشاركة بواسطة -الأمل- في 16 يونيو 2011 في 21:54

#20

:lol:

اللهم لك الحمد كماينبغي لجلال وجهك وعظيم سلطانك

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

post-240687-002153100 1308258925_thumb.p

المرفقات
gant dode.png

تم تعديل هذه المشاركة بواسطة -الأمل- في 17 يونيو 2011 في 00:31

#21

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

لاشكر على واجب اختي .. بالتوفيق ..

.:: Wish to become better and better ::.

#22

لما أرفق ملف في المنتدى ليه ماأقدر أحذفه؟؟!!

تم تعديل هذه المشاركة بواسطة -الأمل- في 21 يونيو 2011 في 20:22

#23

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

اختي يمكنك حذفه من خلال الرابط حذف بجانب المرفق!!

.:: Wish to become better and better ::.

#24

وعليكم السلام ورحمة الله وبركاته.....فين الرابط حذف الذي بجانب المرفق ...ماشوفته؟؟

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