示例#1
0
文件: Utils.cs 项目: lukaszciosek/qXL
        //-------------------------------------------------------------------//
        /// <summary>
        ///     Searches for the longest array in a dictionary.
        /// </summary>
        /// <param name="dict">dictionary</param>
        /// <returns>length of longest array within the dictionary</returns>
        public static int GetMaxDictSize(QDictionary dict)
        {
            var maxLen = -1;

            foreach (var array in from QDictionary.KeyValuePair kv in dict select kv.Value as Array)
            {
                if (array != null)
                {
                    var type = array.GetType().Name.ToLower();
                    if (!type.Equals("char[]"))
                    {
                        if (array.GetValue(array.GetLowerBound(0)) is Array)
                        {
                            throw new ConversionException(
                                      "Cannot handle nested multidimensional arrays as a dictionary value");
                        }

                        maxLen = (maxLen < array.Length) ? (array.Length) : maxLen;
                    }
                    else
                    {
                        maxLen = (maxLen < 1) ? 1 : maxLen;
                    }
                }
                else
                {
                    maxLen = (maxLen < 1) ? 1 : maxLen;
                }
            }
            return(maxLen);
        }
示例#2
0
 private static void PrintResult(QDictionary d)
 {
     foreach (QDictionary.KeyValuePair e in d)
     {
         Console.WriteLine(e.Key + "| " + e.Value);
     }
 }
 static void PrintResult(QDictionary d, Func <string, Task> func)
 {
     foreach (QDictionary.KeyValuePair e in d)
     {
         Console.WriteLine(e.Key + "| " + e.Value);
     }
 }
示例#4
0
 //-------------------------------------------------------------------//
 private static object[,] QDict2Excel(QDictionary dict)
 {
     try
     {
         var len        = Utils.GetMaxDictSize(dict);
         var res        = new object[len + 1, dict.Keys.Length];
         var keyCounter = 0;
         foreach (QDictionary.KeyValuePair kv in dict)
         {
             var k = Convert2Excel(kv.Key);
             if (k is Array)
             {
                 k =
                     (from object x in ((Array)k) where x != null select x).Aggregate("",
                                                                                      (current, x) => current + (" " + x)).Trim();
             }
             res[0, keyCounter] = k; //kv.Key.ToString();
             var array = kv.Value as Array;
             var type  = kv.Value.GetType().Name.ToLower();
             if (array != null && !type.Equals("char[]"))
             {
                 for (var i = 0; i < array.Length; i++)
                 {
                     res[i + 1, keyCounter] = Convert2Excel(array.GetValue(i));
                 }
                 if (array.Length + 1 < res.GetLength(0))
                 {
                     for (var i = array.Length; i < res.GetLength(0) - 1; i++)
                     {
                         res[i + 1, keyCounter] = ""; // remove null elements
                     }
                 }
             }
             else
             {
                 res[1, keyCounter] = Convert2Excel(kv.Value);
                 if (1 < res.GetLength(0))
                 {
                     for (var i = 1; i < res.GetLength(0) - 1; i++)
                     {
                         res[i + 1, keyCounter] = ""; // remove null elements
                     }
                 }
             }
             keyCounter++;
         }
         return(res);
     }
     catch (ConversionException e)
     {
         return(new object[, ] {
             { e.Message }
         });
     }
 }
示例#5
0
        // ReSharper disable InconsistentNaming
        public object[] qDict(object keys, object values, object types)
        // ReSharper restore InconsistentNaming
        {
            if (!(values is Array))
            {
                values = new[] { values }
            }
            ;

            if ((values as Array).Rank != 2 && !(keys is Array))
            {
                values = new[] { values }
            }
            ;

            if (!(keys is Array) && keys != null)
            {
                keys = new[] { keys }
            }
            ;

            var array = keys as Array;

            if (array != null && array.Rank == 2) //thats how it comes from worksheet.
            {
                var k = keys as Array;
                if (k.GetLength(0) == 1 || k.GetLength(1) == 1)
                {
                    keys = Utils.Com2DArray2Array(k);
                }
            }

            var res = qList(values, types, true);

            if (res[2] != null)
            {
                return(res);
            }

            var dict = new QDictionary(keys as Array, Conversions[res[0].ToString()] as Array);

            Conversions[res[0].ToString()] = dict;
            return(res);
        }
示例#6
0
        public void TestQDictionary()
        {
            string[] keys   = new string[] { "foo", "bar", "z" };
            object[] values = new object[] { 1, "val", null };

            var d = new QDictionary(keys, values);

            Assert.IsTrue(d.Equals(new QDictionary(keys, values)));

            var e = d.GetEnumerator();
            int i = 0;

            while (e.MoveNext())
            {
                var kv = e.Current;
                Assert.AreEqual(keys[i], kv.Key);
                Assert.AreEqual(values[i], kv.Value);
                i++;
            }

            Assert.AreEqual(i, d.Count);

            var table = new QTable(new[] { "eid" }, new object[] { new[] { 1001, 1002, 1003 } });

            d = new QDictionary(keys, table);
            Assert.IsTrue(d.Equals(new QDictionary(keys, table)));

            e = d.GetEnumerator();
            i = 0;
            while (e.MoveNext())
            {
                var kv = e.Current;
                Assert.AreEqual(keys[i], kv.Key);
                Assert.AreEqual(table[i].ToArray(), ((QTable.Row)kv.Value).ToArray());
                i++;
            }

            Assert.AreEqual(i, d.Count);
        }
示例#7
0
        public void TestQDictionary()
        {
            string[] keys = new string[] { "foo", "bar", "z" };
            object[] values = new object[] { 1, "val", null };

            var d = new QDictionary(keys, values);
            Assert.IsTrue(d.Equals(new QDictionary(keys, values)));

            var e = d.GetEnumerator();
            int i = 0;
            while (e.MoveNext())
            {
                var kv = e.Current;
                Assert.AreEqual(keys[i], kv.Key);
                Assert.AreEqual(values[i], kv.Value);
                i++;
            }

            Assert.AreEqual(i, d.Count);

            var table = new QTable(new[] { "eid" }, new object[] { new[] { 1001, 1002, 1003 } });
            d = new QDictionary(keys, table);
            Assert.IsTrue(d.Equals(new QDictionary(keys, table)));

            e = d.GetEnumerator();
            i = 0;
            while (e.MoveNext())
            {
                var kv = e.Current;
                Assert.AreEqual(keys[i], kv.Key);
                Assert.AreEqual(table[i].ToArray(), ((QTable.Row)kv.Value).ToArray());
                i++;
            }

            Assert.AreEqual(i, d.Count);
        }
示例#8
0
 static void PrintResult(QDictionary d)
 {
     foreach (QDictionary.KeyValuePair e in d)
     {
         Console.WriteLine(e.Key + "| " + e.Value);
     }
 }
示例#9
0
        protected string MakeFilterText(IBNReportTemplate repTemp, QObject qItem)
        {
            string retval = "";

            foreach (FilterInfo fi in repTemp.Filters)
            {
                QField qTemp = qItem.Fields[fi.FieldName];
                if (qTemp == null)
                {
                    continue;
                }
                QDictionary qDTemp = qItem.GetDictionary(qTemp);
                if (qDTemp != null)
                {
                    if (fi.Values.Count > 0)
                    {
                        retval += qTemp.FriendlyName + "&nbsp;=&nbsp;";
                        string sqlCommand = qDTemp.GetSQLQuery(Security.CurrentUser.LanguageId);
                        using (IDataReader reader = Report.GetQDictionary(sqlCommand))
                        {
                            ArrayList alDicVal = new ArrayList();
                            foreach (string _s in fi.Values)
                            {
                                alDicVal.Add(_s);
                            }
                            while (reader.Read())
                            {
                                if (alDicVal.Contains(reader["Id"].ToString()))
                                {
                                    retval += "<font color='red'>" + CommonHelper.GetResFileString(reader["Value"].ToString()) + "</font>,&nbsp;";
                                }
                            }
                        }
                        retval = retval.Remove(retval.Length - 7, 7) + "<br>";
                    }
                }
                else
                {
                    switch (qTemp.DataType)
                    {
                    case DbType.Decimal:
                    case DbType.Int32:
                        if (fi.Values.Count > 0)
                        {
                            retval += qTemp.FriendlyName;
                            switch (fi.Values[0])
                            {
                            case "0":
                                retval += "&nbsp;=<font color='red'>&nbsp;" + fi.Values[1] + "</font><br>";
                                break;

                            case "1":
                                retval += "&nbsp;&gt;<font color='red'>&nbsp;" + fi.Values[1] + "</font><br>";
                                break;

                            case "2":
                                retval += "&nbsp;&lt;<font color='red'>&nbsp;" + fi.Values[1] + "</font><br>";
                                break;

                            case "3":
                                retval += "&nbsp;<font color='red'>" + LocRM.GetString("tBetween") + "&nbsp;" + fi.Values[1] + "&nbsp;-&nbsp;" + fi.Values[2] + "</font><br>";
                                break;
                            }
                        }
                        break;

                    case DbType.DateTime:
                    case DbType.Date:
                        if (fi.Values.Count > 0)
                        {
                            retval += qTemp.FriendlyName;
                            switch (fi.Values[0])
                            {
                            case "1":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tToday") + "</font><br>";
                                break;

                            case "2":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tYesterday") + "</font><br>";
                                break;

                            case "3":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tThisWeek") + "</font><br>";
                                break;

                            case "4":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tLastWeek") + "</font><br>";
                                break;

                            case "5":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tThisMonth") + "</font><br>";
                                break;

                            case "6":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tLastMonth") + "</font><br>";
                                break;

                            case "7":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tThisYear") + "</font><br>";
                                break;

                            case "8":
                                retval += "&nbsp;=&nbsp;<font color='red'>" + LocRM.GetString("tLastYear") + "</font><br>";
                                break;

                            case "9":
                                if (DateTime.Parse(fi.Values[1]) == DateTime.MinValue)
                                {
                                    retval += "&nbsp;<font color='red'>" + LocRM.GetString("tLess") + "&nbsp;" + DateTime.Parse(fi.Values[2]).ToShortDateString() + "</font><br>";
                                }
                                else if (DateTime.Parse(fi.Values[2]) >= DateTime.MaxValue.Date)
                                {
                                    retval += "&nbsp;<font color='red'>" + LocRM.GetString("tGreater") + "&nbsp;" + DateTime.Parse(fi.Values[1]).ToShortDateString() + "</font><br>";
                                }
                                else
                                {
                                    retval += "&nbsp;<font color='red'>" + LocRM.GetString("tBetween") + "&nbsp;" + DateTime.Parse(fi.Values[1]).ToShortDateString() + "&nbsp;-&nbsp;" + DateTime.Parse(fi.Values[2]).ToShortDateString() + "</font><br>";
                                }
                                break;
                            }
                        }
                        break;

                    case DbType.String:
                        if (fi.Values.Count > 0)
                        {
                            retval += qTemp.FriendlyName + "&nbsp;=&nbsp;<font color='red'>" + fi.Values[0] + "</font><br>";
                        }
                        break;

                    case DbType.Time:
                        retval += qTemp.FriendlyName;
                        if (fi.Values.Count > 0)
                        {
                            switch (fi.Values[0])
                            {
                            case "0":
                                retval += "&nbsp;=<font color='red'>&nbsp;" + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>";
                                break;

                            case "1":
                                retval += "&nbsp;&gt;<font color='red'>&nbsp;" + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>";
                                break;

                            case "2":
                                retval += "&nbsp;&lt;<font color='red'>&nbsp;" + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>";
                                break;

                            case "3":
                                retval += "&nbsp;<font color='red'>" + LocRM.GetString("tBetween") + "&nbsp;" + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "&nbsp;-&nbsp;" + CommonHelper.GetHours(int.Parse(fi.Values[2])) + "</font><br>";
                                break;
                            }
                        }
                        else
                        {
                            retval += "<br>";
                        }
                        break;
                    }
                }
            }
            return(retval);
        }