0

私は JqueryCalendar プラグインを使用していました。すべてのイベントの合計時間を合計することはできますが、月ビューの単一の日付を合計することはできません。

4

1 に答える 1

0

最後に合計を計算する方法を見つけました

このプロジェクトをMVC3に変換する必要があったため、ほとんど変更を加えていませんでした。

手順の変更:proc_JQCalendar_listCalendarByRangeは、クエリを開始時刻で並べ替えるように変更し、合計が日単位で接続されるようにしました。

public static Dictionary listCalendarByRange(string sd、string ed){

        // Convert unitx timestamp to DateTime
        DateTime dtSd = fn.ConvertFromUnixTimestamp(Convert.ToDouble(sd));
        DateTime dtEd = fn.ConvertFromUnixTimestamp(Convert.ToDouble(ed));

        Dictionary<string, object> ret = new Dictionary<string, object>();

        string sStp = "proc_JQCalendar_listCalendarByRange";
        int sqlReturn = 0;

        DataTable dtResults = new DataTable();
        SqlConnection oSqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString);
        SqlCommand oSqlCmd = new SqlCommand(sStp, oSqlCon);
        SqlDataAdapter oSqlDa = new SqlDataAdapter(oSqlCmd);

        try
        {

            oSqlCmd.CommandType = CommandType.StoredProcedure;
            oSqlCmd.CommandTimeout = 900;

            SqlParameter paramStartTime = new SqlParameter("@starttime", SqlDbType.DateTime);
            SqlParameter paramEndTime = new SqlParameter("@endtime", SqlDbType.DateTime);

            // Assign values to parameters
            paramStartTime.Value = dtSd;
            paramEndTime.Value = dtEd;

            // Add the parameters to oSqlCmd object
            oSqlCmd.Parameters.Add(paramStartTime);
            oSqlCmd.Parameters.Add(paramEndTime);

            // Open SQL connection and execute it
            oSqlCon.Open();
            sqlReturn = oSqlDa.Fill(dtResults);

            List<object> evtList = new List<object>();

            Decimal totalExpense = 0;
            Decimal newtotalExpense = 0;
            Decimal newDateExpense = 0;
            DateTime dStart=DateTime.MinValue;
            DateTime dCheck = DateTime.MinValue;
            int flag = 0;
            int count = dtResults.Rows.Count;
            Decimal whole = 0;


            for (int i = 0; i < count ; i++)
            {

                DataRow row = dtResults.Rows[i];



            //foreach (DataRow row in dtResults.Rows)
            //{



                    DateTime dtST = DateTime.Parse(row["StartTime"].ToString());
                    DateTime dtET = DateTime.Parse(row["EndTime"].ToString());

                    if (flag == 0)
                    {
                        dStart = dtST;
                    }
                    else
                    {
                        dCheck = dtST;
                    }


                    int total = 0;

                    string sAde = row["IsAllDayEvent"].ToString();


                    object[] EvtData = new object[13];

                    EvtData[0] = (int)row["id"];
                    EvtData[1] = row["Subject"].ToString();
                    EvtData[2] = dtST.ToString("MM/dd/yyyy HH:mm");
                    EvtData[3] = dtET.ToString("MM/dd/yyyy HH:mm");
                    EvtData[4] = Convert.ToInt16(sAde);
                    EvtData[5] = 0;
                    EvtData[6] = 0;
                    EvtData[7] = row["Color"].ToString();
                    EvtData[8] = 1;
                    //  EvtData[9] = row["Location"].ToString();
                    EvtData[10] = string.Empty;
                    EvtData[11] = row["Amount"].ToString();



                    evtList.Add(EvtData);
                   // evtList.AsReadOnly();

                    if (i != count - 1)
                    {


                        DataRow rowNext = dtResults.Rows[i + 1];

                        if (row["StartTime"].ToString() == rowNext["StartTime"].ToString())
                        {

                            Decimal granT, granT2;



                             granT = Convert.ToDecimal(row["Amount"]);
                             granT2 = Convert.ToDecimal(rowNext["Amount"]);

                            if (whole == 0)
                            {
                                whole += granT + granT2;
                            }
                            else
                            {
                                whole += granT2;
                            }


                        }
                        else
                        {

                            Decimal granTnew = Convert.ToDecimal(row["Amount"]);

                            if (whole != 0)
                            {
                                EvtData = objectFucntions(row, dtST, dtET, sAde, (whole));
                            }
                            else
                            {
                                EvtData = objectFucntions(row, dtST, dtET, sAde, (granTnew));
                            }


                            evtList.Add(EvtData);
                            whole = 0;
                        }
                    }
                    else
                    {
                        Decimal granTnew=Convert.ToDecimal(row["Amount"]);                         
                        whole += granTnew;
                        EvtData = objectFucntions(row, dtST, dtET, sAde, whole);
                        evtList.Add(EvtData);
                        whole = 0;
                    }


                    ////if (EvtData[11] == null) { EvtData[11] = 0; }
                    //if (dCheck == dStart)
                    //{

                    //    totalExpense = Convert.ToDecimal(EvtData[11]) + Convert.ToDecimal(newtotalExpense);
                    //    newtotalExpense = totalExpense;
                    //    newDateExpense = 0;

                    //}
                    //else
                    //{

                    //    newDateExpense = 0;
                    //    if (flag > 0)
                    //    {
                    //        object[] EvtD = new object[4];
                    //        EvtD[0] = EvtData[2];
                    //        EvtD[1] = EvtData[3];
                    //        EvtD[2] = newtotalExpense;
                    //        evtList.Add(EvtD);
                    //        newtotalExpense = 0;
                    //    }
                    //    newDateExpense = Convert.ToDecimal(EvtData[11]) + Convert.ToDecimal(newDateExpense);
                    //    newtotalExpense = newDateExpense;

                    //}




                    dCheck = dStart;

                    flag += 1;

                }


            ret.Add("events", evtList);
            ret.Add("issort", true);
            ret.Add("start", dtSd.ToString("MM/dd/yyyy HH:mm"));
            ret.Add("end", dtEd.ToString("MM/dd/yyyy HH:mm"));
            ret.Add("error", null);

        }
        catch (Exception ex)
        {
            ret.Add("error", "list calendar by range failed: " + ex.Message);
            //ret["error"] = "list calendar by range failed: " + ex.Message;

        }
        finally
        {
            if (oSqlCon.State == ConnectionState.Open)
                oSqlCon.Close();
        }


        return ret;

    }

そして関数:

public static Object [] objectFucntions(DataRow row、DateTime dtST、DateTime dtET、String sAde、Decimal total){

        object[] EvtData = new object[13];
        EvtData[0] = (int)row["id"];
        EvtData[1] = total;
        EvtData[2] = dtST.ToString("MM/dd/yyyy HH:mm");
        EvtData[3] = dtET.ToString("MM/dd/yyyy HH:mm");
        EvtData[4] = Convert.ToInt16(sAde);
        EvtData[5] = 0;
        EvtData[6] = 0;
        EvtData[7] = 3;
        EvtData[8] = 1;
        //  EvtData[9] = row["Location"].ToString();
        EvtData[10] = string.Empty;
        EvtData[11] = row["Amount"].ToString();

        return EvtData;
    }

PS:これは私のデータベースに関連しています。

于 2012-11-09T09:10:53.780 に答える