/// <summary> /// Grid 取值(将控件数据放入具有类型为 T 的数据结构中) /// 通过 RowIndex 匹配输入的 Data 的 Index /// </summary> /// <typeparam name="T"></typeparam> /// <param name="data"></param> public void Syn <T>(List <T> data, Action <RowCollector <T> > collect) where T : class, new() { for (int i = 0; i < _Grid.Rows.Count; i++) { RowCollector <T> collector = new RowCollector <T>(_Grid.Rows[i], data[i]); if (collect != null) { collect(collector); } } }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (For == null) { throw new ArgumentNullException(ForAttributeName); } if (KeyName == null && !FromRow.HasValue) { throw new ArgumentNullException(KeyAttributeName); } var rc = context.GetFatherReductionContext(); if (rc.RowParsingDisabled) { output.TagName = string.Empty; output.Content.SetHtmlContent(string.Empty); return; } var nc = new ReductionContext(TagTokens.Row, 0, rc.Defaults); context.SetChildrenReductionContext(nc); await output.GetChildContentAsync(); RowType inherit = null; if (FromRow.HasValue) { var count = 0; foreach (var item in rc.Results) { if (item.Token == TagTokens.Row) { if (FromRow.Value == count) { inherit = item.Result as RowType; continue; } else { count++; } } } } var collector = new RowCollector(nc, FromRow); var res = collector.Process(this, rc.Defaults); if (res != null) { rc.Results.Add(new ReductionResult(TagTokens.Row, 0, res)); } output.TagName = string.Empty; output.Content.SetHtmlContent(string.Empty); }
/// <summary> /// Grid 取值(将控件数据放入通用类型的数据结构中) /// 单行数据使用 Dictionary(string, object) 存储 /// 例如:("Quantity", 1) ("Name", "ABC") /// </summary> /// <typeparam name="T"></typeparam> /// <param name="row"></param> /// <param name="data"></param> /// <returns></returns> public List <Dictionary <string, object> > Collect(Action <RowCollector> collect) { List <Dictionary <string, object> > data = new List <Dictionary <string, object> >(); foreach (GridViewRow r in _Grid.Rows) { Dictionary <string, object> rowData = new Dictionary <string, object>(); var c = new RowCollector(r, rowData); collect(c); data.Add(rowData); } return(data); }
/// <summary> /// Grid 取值(将控件数据放入预定的数据类型中) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="collect"></param> /// <returns></returns> public List <T> Collect <T>(Func <int, RowCollector <T>, bool> collect) where T : class, new() { List <T> data = new List <T>(); for (int i = 0; i < _Grid.Rows.Count; i++) { T rowData = Activator.CreateInstance <T>(); var c = new RowCollector <T>(_Grid.Rows[i], rowData); if (collect(i, c)) { data.Add(rowData); } } return(data); }
/// <summary> /// Grid 取值(将控件数据放入通用类型的数据结构中) /// 单行数据使用 Dictionary(string, object) 存储 /// 例如:("Quantity", 1) ("Name", "ABC") /// </summary> public List <Dictionary <string, object> > Collect(Func <int, RowCollector, bool> collect) { List <Dictionary <string, object> > data = new List <Dictionary <string, object> >(); for (int i = 0; i < _Grid.Rows.Count; i++) { Dictionary <string, object> rowData = new Dictionary <string, object>(); var c = new RowCollector(_Grid.Rows[i], rowData); if (collect(i, c)) { data.Add(rowData); } } return(data); }
public void DeepRowConstructorTest() { Pickler pickler = CreatePickler(); var rowschema = new StructType( new StructField[] { new StructField("id", new StringType()), }); var schema = new StructType(new StructField[] { new StructField("age", new IntegerType()), new StructField("name", new StringType()), new StructField("dataarray", new ArrayType(rowschema)), }); var row1 = new Row(new object[] { 10, "name1", new ArrayList(new Row[] { new Row(new object[] { "id1" }, rowschema), new Row(new object[] { "id2" }, rowschema), }) }, schema); var row2 = new Row(new object[] { 15, "name2", new ArrayList(new Row[] { new Row(new object[] { "id1" }, rowschema), new Row(new object[] { "id2" }, rowschema), new Row(new object[] { "id3" }, rowschema), }) }, schema); byte[] pickledBytes = pickler.dumps(new[] { row1, row2 }); // Set up the mock to return memory stream to which pickled data is written. var stream = new MemoryStream(); SerDe.Write(stream, pickledBytes.Length); SerDe.Write(stream, pickledBytes); stream.Position = 0; var socket = new Mock <ISocketWrapper>(); socket.Setup(m => m.InputStream).Returns(stream); socket.Setup(m => m.OutputStream).Returns(stream); var rowCollector = new RowCollector(); Row[] rows = rowCollector.Collect(socket.Object, true).ToArray(); Assert.Equal(2, rows.Length); Assert.Equal( JsonConvert.SerializeObject(row1), JsonConvert.SerializeObject(rows[0])); Assert.Equal( JsonConvert.SerializeObject(row2), JsonConvert.SerializeObject(rows[1])); }
/// <summary> /// 单列值收集 /// </summary> /// <typeparam name="TControl"></typeparam> /// <typeparam name="T"></typeparam> /// <param name="id">列所在ID</param> /// <param name="valueGet"></param> /// <returns></returns> public List <T> GetSelected <TControl, T>(string id, Func <TControl, T> valueGet) where TControl : Control { List <T> result = new List <T>(); foreach (var kv in Selection) { if (kv.Value) { var dic = new Dictionary <string, object>(); var rc = new RowCollector(_Grid.Rows[kv.Key], dic); rc.Do(id, valueGet); result.Add((T)dic[id]); } } return(result); }
public string Add(string Json) { try { List <Entity> entities = JsonAdapter.AdaptEntityFromJson(Json); foreach (Entity item in entities) { string Sql = RowCollector.Insert(item, NpgController); NpgController.InvokeQuery(Sql); } return(new JObject().AddStatus("Success").ToString()); } catch (Exception ex) { return(new JObject().AddStatus(ex).ToString()); } }
public string Update(string Json) { try { string TableName = JsonAdapter.TableNameFromJson(Json); List <Packet> packets = PackageAdapter.PacketsFromJson(Json); string Condition = FilterAdapter.GetCondition(TableName, packets.ToArray()); List <UpdatePacket> updatePackets = SetConverter.FromJson(Json); string Sets = RowCollector.Set(updatePackets); string Sql = $"UPDATE \"{TableName}\" {Sets} WHERE {Condition}"; return(JsonAdapter.ResultToJson(NpgController.InvokeQuery(Sql))); } catch (Exception ex) { return(new JObject().AddStatus(ex).ToString()); } }
public void RowCollectorTest() { var stream = new MemoryStream(); Pickler pickler = CreatePickler(); var schema = (StructType)DataType.ParseDataType(_testJsonSchema); // Pickle two rows in one batch. var row1 = new Row(new object[] { 10, "name1" }, schema); var row2 = new Row(new object[] { 15, "name2" }, schema); var batch1 = pickler.dumps(new[] { row1, row2 }); SerDe.Write(stream, batch1.Length); SerDe.Write(stream, batch1); // Pickle one row in one batch. var row3 = new Row(new object[] { 20, "name3" }, schema); var batch2 = pickler.dumps(new[] { row3 }); SerDe.Write(stream, batch2.Length); SerDe.Write(stream, batch2); // Rewind the memory stream so that the row collect can read from beginning. stream.Seek(0, SeekOrigin.Begin); // Set up the mock to return memory stream to which pickled data is written. var socket = new Mock <ISocketWrapper>(); socket.Setup(m => m.InputStream).Returns(stream); socket.Setup(m => m.OutputStream).Returns(stream); var rowCollector = new RowCollector(); Row[] rows = rowCollector.Collect(socket.Object).ToArray(); Assert.Equal(3, rows.Length); Assert.Equal(row1, rows[0]); Assert.Equal(row2, rows[1]); Assert.Equal(row3, rows[2]); }
/// <summary> /// 初始化 /// </summary> /// <param name="gv"></param> /// <param name="columnSet"></param> /// <param name="rowCreate"></param> /// <param name="rowDataCollect"></param> /// <param name="multiSelect">null: 不选择 true: 多选(checkbox)false: 单选</param> public void Initialize(GridView gv, Action <ColumnSetter> columnSet, Action <RowCreator> rowCreate = null, Action <RowCollector> rowDataCollect = null, GridWrapper.SelectionMode mode = SelectionMode.None, bool showRowNumber = true, bool showFooter = true) { _Grid = gv; _Mode = mode; gv.CssClass = "grid"; gv.ShowFooter = showFooter; gv.ShowHeaderWhenEmpty = true; gv.ShowHeader = true; gv.AutoGenerateColumns = false; gv.RowStyle.CssClass = "gridRow"; if (gv.RowStyle.Height == Unit.Empty) { gv.RowStyle.Height = 20; } List <DataControlField> columns = new List <DataControlField>(); if (showRowNumber) { var c = new TemplateField() { HeaderTemplate = new TemplateItem.Label(l => l.Text = "#") { Id = "__lb_Header" }, ItemTemplate = new TemplateItem.Label() { Id = "__lb" } }; c.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; c.HeaderStyle.Width = 30; c.ItemStyle.CssClass = "gridItem-bound-n"; c.ItemStyle.Width = 30; c.ItemStyle.HorizontalAlign = HorizontalAlign.Right; if (!_RowButtonVisible) { c.ItemStyle.CssClass = "gridItem-bound-n-b"; } columns.Add(c); } switch (_Mode) { case SelectionMode.Multiple: var c = new TemplateField() { HeaderTemplate = new TemplateItem.CheckBox(cc => { cc.Attributes["onclick"] = "ISEx.toggleCBs(this,'__cb')"; }) { Id = "__cb_Header" }, ItemTemplate = new TemplateItem.CheckBox() { Id = "__cb" } }; c.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; c.HeaderStyle.Width = 20; c.ItemStyle.CssClass = "gridItem-template"; c.ItemStyle.Width = 20; c.ItemStyle.HorizontalAlign = HorizontalAlign.Center; columns.Add(c); break; case SelectionMode.Single: c = new TemplateField() { ItemTemplate = new TemplateItem.Button(b => { b.ID = "__b"; b.Text = "选"; b.Height = 20; if (!_RowButtonVisible) { b.Style.Add("display", "none"); } }) }; c.ItemStyle.CssClass = "gridItem-hidden"; columns.Add(c); break; } //if (gv.Columns.Count == 0) //{ // columns.ForEach(c => gv.Columns.Add(c)); //} //else //{ // for (int i = 0; i < columns.Count; i++) gv.Columns.Insert(i, columns[i]); //} columns.ForEach(c => gv.Columns.Add(c)); if (columnSet != null) { columnSet(new ColumnSetter(gv)); } gv.RowCreated += (s, e) => { if (rowCreate != null) { rowCreate(new RowCreator(e.Row)); } }; gv.RowDataBound += (s, e) => { if (e.Row.RowType == DataControlRowType.DataRow) { /// 处理具有特殊约定的控件 /// __lb:行序号 /// __cb:行选择控件 /// __b: 行按钮(用于单选一行) e.Row.FindControl("__lb").If <Label>(l => l.Text = (e.Row.RowIndex + 1).ToString()); e.Row.FindControl("__cb").If <CheckBox>(cc => { cc.Attributes["onclick"] = string.Format("{0}.selection[{1}]=this.checked;ISEx.toggleCB(this);", ClientID, e.Row.RowIndex.ToString()); }); e.Row.FindControl("__b").If <Button>(b => { b.CommandName = "S"; b.CommandArgument = e.Row.RowIndex.ToString(); b.OnClientClick = RowButtonClientClick; if (!_RowButtonVisible) { if (_DblClickToSelect) { e.Row.Attributes["ondblclick"] = Page.ClientScript.GetPostBackEventReference(b, string.Empty); } else { e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackEventReference(b, string.Empty); } } }); } }; gv.RowCommand += (s, e) => { switch (e.CommandName) { // 行选 case "S": int index = _Util.Convert <int>(e.CommandArgument); foreach (GridViewRow r in gv.Rows) { r.CssClass = "gridRow"; } gv.Rows[index].CssClass = "gridRow-selected"; if (rowDataCollect != null) { Dictionary <string, object> data = new Dictionary <string, object>(); RowCollector rc = new RowCollector(gv.Rows[index], data); rowDataCollect(rc); } break; // 排序表头 case "O": // 备份排序信息 List <KeyValuePair <string, bool> > sorts = new List <KeyValuePair <string, bool> >(); List <GridHeaderSorter> sorters = GetSorters(); for (int i = 0; i < sorters.Count; i++) { if (sorters[i].FieldName == e.CommandArgument.ToStringEx()) { if (sorters[i].Sort.HasValue) { sorters[i].Sort = !sorters[i].Sort.Value; } else { sorters[i].Sort = true; } sorts.Add(new KeyValuePair <string, bool>(sorters[i].FieldName, sorters[i].Sort.Value)); } } // 发出事件 if (Sort != null) { Sort(this, EventArgs.Empty); } // 回写排序状态信息 sorters = GetSorters(); sorters.ForEach(ss => ss.Sort = null); foreach (var ss in sorts) { sorters.ForEach( sss => { if (sss.FieldName == ss.Key) { sss.Sort = ss.Value; } sss.Caption = ss.Value.ToString(); }); } break; } }; }