public void Split(string fieldName, string captionName, params string[] args) { DataSlot dataset = new DataSlot(); DataSlotCollection rows = this["rows"] as DataSlotCollection; if (rows == null || rows.Count < 1) { return; } DataSlot prevRow = rows[0]; object prevValue = prevRow[fieldName]; DataSlotCollection temp = new DataSlotCollection(); foreach (DataSlot i in rows) { object v = i[fieldName]; if (!Equals(v, prevValue)) { AddPreviousCategory(captionName, dataset, prevRow, temp, args); temp = new DataSlotCollection(); prevRow = i; prevValue = v; } temp.Add(i); } AddPreviousCategory(captionName, dataset, prevRow, temp, args); this["dataset"] = dataset; Remove("rows"); }
private static void AddPreviousCategory(string captionName, DataSlot dataset, DataSlot prevRow, DataSlotCollection temp, params string [] args) { DataSlot data = dataset.Set<DataSlot>(Convert.ToString(prevRow[captionName])); foreach (string i in args) { string[] item = i.Split('='); if (item.Length == 1 && prevRow.ContainsKey(item[0])) { data[i] = prevRow[item[0]]; } else if (item.Length > 1) { string key = item[0]; item[0] = string.Empty; data[key] = string.Join("=", item).Substring(1); } } data["rows"] = temp; }