Example #1
0
 /// <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);
         }
     }
 }
Example #2
0
        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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        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]));
        }
Example #7
0
        /// <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);
        }
Example #8
0
 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());
     }
 }
Example #9
0
        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());
            }
        }
Example #10
0
        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]);
        }
Example #11
0
        /// <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;
                }
            };
        }