public string DisplayMaterial(string name, double percent, MaterialCommoditiesList historicmatlist = null, MaterialCommoditiesList currentmatlist = null)
        {
            StringBuilder scanText = new StringBuilder();

            MaterialCommodityDB mc = MaterialCommodityDB.GetCachedMaterial(name);

            if (mc != null)
            {
                MaterialCommodities historic = historicmatlist?.Find(mc.name);
                MaterialCommodities current  = Object.ReferenceEquals(historicmatlist, currentmatlist) ? null : currentmatlist?.Find(mc.name);
                int?limit = MaterialCommodityDB.MaterialLimit(mc);

                string matinfo = historic?.count.ToString() ?? "0";
                if (limit != null)
                {
                    matinfo += "/" + limit.Value.ToString();
                }

                if (current != null && (historic == null || historic.count != current.count))
                {
                    matinfo += " Cur " + current.count.ToString();
                }

                scanText.AppendFormat("{0} ({1}) {2} {3}% {4}\n", mc.name, mc.shortname, mc.type, percent.ToString("N1"), matinfo);
            }
            else
            {
                scanText.AppendFormat("{0} {1}%\n", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(name.ToLower()),
                                      percent.ToString("N1"));
            }

            return(scanText.ToNullSafeString());
        }
        private void Display(MaterialCommoditiesList mcl)
        {
            dataGridViewMC.Rows.Clear();
            textBoxItems1.Text = textBoxItems2.Text = "";

            if (mcl == null)
            {
                return;
            }

            List <MaterialCommodities> mc = mcl.Sort(!materials);

            if (mc.Count > 0)
            {
                labelNoItems.Visible = false;

                foreach (MaterialCommodities m in mc)
                {
                    object[] rowobj;

                    if (materials)
                    {
                        rowobj = new[] { m.name, m.shortname, m.category, m.type, $"{m.count.ToString()}/{(MaterialCommodityDB.MaterialLimit(m.type)??0).ToString()}" };
                    }
                    else
                    {
                        rowobj = new[] { m.name, m.type, m.count.ToString(), m.price.ToString("0.#") };
                    }

                    int idx = dataGridViewMC.Rows.Add(rowobj);
                    //dataGridViewMC.Rows[idx].Tag = m;
                }

                if (dataGridViewMC.SortedColumn != null && dataGridViewMC.SortOrder != SortOrder.None)
                {
                    dataGridViewMC.Sort(dataGridViewMC.SortedColumn, dataGridViewMC.SortOrder == SortOrder.Descending ? ListSortDirection.Descending : ListSortDirection.Ascending);
                }

                if (materials)
                {
                    textBoxItems1.Text = mcl.DataCount.ToStringInvariant();
                    textBoxItems2.Text = mcl.MaterialsCount.ToStringInvariant();
                }
                else
                {
                    textBoxItems1.Text = mcl.CargoCount.ToStringInvariant();
                }
            }
            else
            {
                labelNoItems.Visible = true;
            }
        }