| | |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | using DevExpress.Utils.DirectXPaint; |
| | | using DevExpress.XtraEditors; |
| | | using DevExpress.XtraEditors.Controls; |
| | | using DevExpress.XtraGrid; |
| | | using DevExpress.XtraGrid.Columns; |
| | | using DevExpress.XtraGrid.Menu; |
| | | using DevExpress.XtraGrid.Views.Grid; |
| | | using DevExpress.XtraTab; |
| | | using DevExpress.XtraTreeList; |
| | |
| | | using Gs.DevApp.UserControl; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using OracleInternal.Sharding; |
| | | using UserControls.Data; |
| | | using static System.Windows.Forms.Control; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | public static (Size, string, Color, Padding) getLoading() |
| | | { |
| | | Size _size = new Size(360, 90); |
| | | return (_size, "拼命加载中,请稍后...", System.Drawing.Color.LightSkyBlue, new Padding(15)); |
| | | } |
| | | public static string HttpPost(string url, string meth, string param) |
| | | { |
| | | string _caption = "拼命加载中,请稍后..."; |
| | | DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm(_caption + meth, "友情提示"); |
| | | wdf.BackColor = System.Drawing.Color.LightSkyBlue; |
| | | wdf.Padding = new Padding(15); |
| | | Size _size; string _caption; Color _color; Padding _pad; |
| | | (_size, _caption, _color, _pad) = getLoading(); |
| | | DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm("加载进度:"+meth, _caption, _size); |
| | | wdf.BackColor = _color; |
| | | wdf.Padding = _pad; |
| | | HttpWebRequest request = null; |
| | | StreamWriter requestStream = null; |
| | | WebResponse response = null; |
| | |
| | | request.Timeout = 150000; |
| | | request.AllowAutoRedirect = false; |
| | | request.ServicePoint.Expect100Continue = false; |
| | | // wdf.SetCaption(_caption + "(10/100)" + meth); |
| | | HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); |
| | | request.CachePolicy = noCachePolicy; |
| | | // wdf.SetCaption(_caption + "(20/100)" + meth); |
| | | requestStream = new StreamWriter(request.GetRequestStream()); |
| | | requestStream.Write(param); |
| | | requestStream.Close(); |
| | | // wdf.SetCaption(_caption + "30/100)" + meth); |
| | | response = request.GetResponse(); |
| | | // wdf.SetCaption(_caption + "(40/100)"); |
| | | if (response != null) |
| | | { |
| | | // wdf.SetCaption(_caption + "(50/100)" + meth); |
| | | var reader = new StreamReader(response.GetResponseStream(), |
| | | Encoding.UTF8); |
| | | responseStr = reader.ReadToEnd(); |
| | | //File.WriteAllText(Server.MapPath("~/") + @"\test.txt", responseStr); |
| | | reader.Close(); |
| | | // wdf.SetCaption(_caption + "(60/100)" + meth); |
| | | } |
| | | // wdf.SetCaption(_caption + "(80/100)" + meth); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | requestStream = null; |
| | | response = null; |
| | | } |
| | | // wdf.SetCaption(_caption + "(90/100)"); |
| | | wdf.Close(); |
| | | return responseStr; |
| | | } |
| | |
| | | if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui")) |
| | | { |
| | | colmn.Visible = !isEdt; |
| | | if (colmn.Visible == true) |
| | | colmn.VisibleIndex = 99999; |
| | | } |
| | | else |
| | | { |
| | |
| | | if (colType is CheckEdit) |
| | | { |
| | | var txt = colType as CheckEdit; |
| | | if (_isRead(txt.Tag)) |
| | | { |
| | | txt.ReadOnly = true; |
| | | } |
| | | else |
| | | txt.ReadOnly = isEdt; |
| | | if (txt != null) |
| | | { |
| | | switch (strVal) |
| | | { |
| | | case "True": |
| | |
| | | txt.Checked = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | txt.ReadOnly = isEdt; |
| | | continue; |
| | | } |
| | | //单选 |
| | |
| | | txt.Enabled = !isEdt; |
| | | continue; |
| | | } |
| | | |
| | | //时间 |
| | | if (colType is DateTimePicker) |
| | | { |
| | |
| | | txt.Enabled = false; |
| | | continue; |
| | | } |
| | | |
| | | //自定销售 |
| | | if (colType is UcLookSales) |
| | | { |
| | | var txt = colType as UcLookSales; |
| | | txt.SetIdOrCode(strVal); |
| | | if (txt.IsReadly == false) |
| | | txt.Enabled = !isEdt; |
| | | else |
| | | txt.Enabled = false; |
| | | continue; |
| | | } |
| | | if (colType is SimpleButton) |
| | | { |
| | | var txt = colType as SimpleButton; |
| | | txt.Enabled = !isEdt; |
| | | continue; |
| | | } |
| | | |
| | | //自定不良 |
| | | if (colType is UcDictionary) |
| | | { |
| | | var txt = colType as UcDictionary; |
| | | txt.TextTxt = (strVal); |
| | | //if (txt.IsReadly == false) |
| | | // txt.Enabled = !isEdt; |
| | | //else |
| | | // txt.Enabled = false; |
| | | continue; |
| | | } |
| | | } |
| | |
| | | if (ctrl is CheckEdit) |
| | | { |
| | | var txt = ctrl as CheckEdit; |
| | | txt.ReadOnly = isEdt; |
| | | if (txt.Tag != null && txt.Tag.ToString().Length > 0 && txt.Tag.ToString().StartsWith("moren")) |
| | | if (_isRead(txt.Tag)) |
| | | { |
| | | txt.Checked = bool.Parse(txt.Tag.ToString().Replace("moren.", "")); |
| | | txt.ReadOnly = true; |
| | | } |
| | | else |
| | | txt.Checked = false; |
| | | txt.ReadOnly = isEdt; |
| | | continue; |
| | | } |
| | | //自定义仓库 |
| | |
| | | txt.Enabled = !isEdt; |
| | | continue; |
| | | } |
| | | |
| | | //自定销售 |
| | | if (ctrl is UcLookSales) |
| | | { |
| | | var txt = ctrl as UcLookSales; |
| | | txt.SetIdOrCode("-1"); |
| | | txt.Enabled = !isEdt; |
| | | continue; |
| | | } |
| | | if (ctrl is SimpleButton) |
| | | { |
| | | var txt = ctrl as SimpleButton; |
| | |
| | | txt.Enabled = false; |
| | | continue; |
| | | } |
| | | //自定销售 |
| | | if (ctrl is UcLookSales) |
| | | { |
| | | var txt = ctrl as UcLookSales; |
| | | if (txt.IsReadly == false) |
| | | txt.Enabled = !isEdt; |
| | | else |
| | | txt.Enabled = false; |
| | | continue; |
| | | } |
| | | if (ctrl is SimpleButton) |
| | | { |
| | | var txt = ctrl as SimpleButton; |
| | |
| | | } |
| | | return isEdt; |
| | | } |
| | | /// <summary> |
| | | /// 切换选项卡 |
| | | /// </summary> |
| | | /// <param name="tabControl">选项卡容器</param> |
| | | /// <param name="idx">从0开始,如果是999,则全部可用</param> |
| | | public static void JumpToTab(XtraTabControl tabControl, int idx) |
| | | { |
| | | if (idx == 999) |
| | | { |
| | | for (var i = 0; i < tabControl.TabPages.Count; i++) |
| | | tabControl.TabPages[i].PageEnabled = true; |
| | | tabControl.SelectedTabPageIndex = tabControl.TabPages.Count - 1; |
| | | return; |
| | | } |
| | | |
| | | for (var i = 0; i < tabControl.TabPages.Count; i++) |
| | | tabControl.TabPages[i].PageEnabled = false; |
| | | tabControl.TabPages[idx].PageEnabled = true; |
| | | tabControl.SelectedTabPageIndex = idx; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// tab跳转:0查看,1退出,2删除,3修改,4新增加 |
| | | /// tab跳转:0查看,1退出,2删除,3修改,4新增加,6保存后 |
| | | /// </summary> |
| | | /// <param name="tabControl"></param> |
| | | /// <param name="idx">0查看,1退出,2删除,3修改,4新增加</param> |
| | | /// <param name="idx">0查看,1退出,2删除,3修改,4新增加,6保存后</param> |
| | | public static void JumpTab(XtraTabControl tabControl, int action) |
| | | { |
| | | |
| | |
| | | tabControl.TabPages[0].PageEnabled = true; |
| | | tabControl.TabPages[1].PageEnabled = true; |
| | | tabControl.SelectedTabPageIndex = 1; |
| | | return; |
| | | } |
| | | |
| | | if (action == 6) |
| | | { |
| | | tabControl.TabPages[0].PageEnabled = true; |
| | | tabControl.TabPages[1].PageEnabled = true; |
| | | |
| | | return; |
| | | } |
| | | } |
| | |
| | | |
| | | return 0; |
| | | } |
| | | } |
| | | public static decimal? GetDecimal(string s) |
| | | { |
| | | if (string.IsNullOrEmpty(s)) return null; |
| | | return decimal.Parse(s); |
| | | } |
| | | public static int ToInt(string str) |
| | | { |
| | |
| | | return rowGuid; |
| | | } |
| | | } |
| | | |
| | | return ""; |
| | | } |
| | | |
| | |
| | | GridView dgv = s as GridView; |
| | | if (dgv != null) |
| | | { |
| | | if (dgv.GetSelectedRows() != null) |
| | | if (dgv.GetSelectedRows() != null && dgv.GetSelectedRows().Count() > 0) |
| | | { |
| | | var selectedRow = dgv.GetSelectedRows()[0]; // 获取第一个选中行的索引 |
| | | if (selectedRow >= 0) |
| | |
| | | btnChkIco.Tag = "未审核"; |
| | | } |
| | | btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右 |
| | | btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素 |
| | | btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 25); // 距离顶部10像素 |
| | | } |
| | | } |
| | | } |
| | |
| | | /// <param name="icoName"></param> |
| | | public static void SetCheckIco(GridView gridView1, string zdChk, string zdChkUser, string zdCkDate, PictureBox btnChkIco, Form fm, string fileName, string icoName = "") |
| | | { |
| | | btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右 |
| | | btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素 |
| | | if (gridView1 == null) |
| | | { |
| | | btnChkIco.Visible = true; |
| | | if (fileName == "1") |
| | | { |
| | | btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check; |
| | | btnChkIco.Tag = "已审核"; |
| | | } |
| | | else |
| | | { |
| | | btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck; |
| | | btnChkIco.Tag = "未审核"; |
| | | } |
| | | return; |
| | | } |
| | | if (fileName == "1" || fileName.ToUpper() == true.ToString().ToUpper()) |
| | | { |
| | | btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check; |
| | |
| | | if (!string.IsNullOrEmpty(zdChk)) |
| | | gridView1.SetFocusedRowCellValue(zdChk, false); |
| | | } |
| | | btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右 |
| | | btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素 |
| | | |
| | | } |
| | | |
| | | #region 设置搜索 |
| | | public static string getQueryWord(string str) |
| | | |
| | | public static FilterEntity getFilterEntityWord(string id, string idDec, string val, string type) |
| | | { |
| | | return str.ToUpper().Replace("query_".ToUpper(), ""); |
| | | } |
| | | public static FilterEntity getFilterEntityWord(string id, string idDec, string val) |
| | | { |
| | | return new FilterEntity(getQueryWord(id), idDec + ")", " like ", "包含)", "%" + val + "%"); |
| | | return new FilterEntity(id, idDec + ")", " like ", "包含)", "%" + val + "%", type); |
| | | } |
| | | public static List<FilterEntity> GetDilter(GridColumnCollection Columns, GridView gridView1 = null) |
| | | { |
| | |
| | | // fiList.Add(new FilterEntity("b.FNumber", "使用组织", " like ", "包含", "%" + filter.Value + "%")); |
| | | string[] ddd = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", "").Split(','); |
| | | //Contains([fSubsidiary], '005') |
| | | fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), ddd[1].Trim())); |
| | | fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), ddd[1].Trim(), col.UnboundExpression)); |
| | | } |
| | | return fiList; |
| | | } |
| | |
| | | } |
| | | } |
| | | else |
| | | _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" + |
| | | itm.fileValue + "'"); |
| | | { |
| | | switch (itm.fileType) |
| | | { |
| | | case "时间类型": |
| | | _sbSqlWhere.Append(" and CONVERT(nvarchar(30)," + itm.fileId + ",23)" + itm.fileOper + "'" + itm.fileValue + "'"); |
| | | break; |
| | | //case "数值类型": |
| | | // _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" + itm.fileValue + "'"); |
| | | // break; |
| | | default: |
| | | _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" + itm.fileValue + "'"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return _sbSqlWhere.ToString(); |
| | | } |
| | |
| | | public delegate void DelegateGetModel(string guid); |
| | | public delegate void DelegateGetList(int currentPage); |
| | | /// <summary> |
| | | /// |
| | | /// 设置主表的样式 |
| | | /// </summary> |
| | | /// <param name="gridView1">gridview</param> |
| | | /// <param name="picCheckBox">图标按钮</param> |
| | |
| | | /// <param name="fileName">字段</param> |
| | | /// <param name="icoName">图标路径</param> |
| | | /// <param name="action"></param> |
| | | public static void SetGridViewParameter(GridView gridView1, PictureBox picCheckBox = null, Form fm = null, string fileName = "checkStatus", string icoName = "", DelegateGetModel action = null, string namespaceFullName = "") |
| | | public static void SetGridViewParameter(GridView gridView1, PictureBox picCheckBox = null, Form fm = null, string fileName = "checkStatus", string icoName = "", DelegateGetModel action = null) |
| | | { |
| | | getGridViewConfig(gridView1, namespaceFullName); |
| | | gridView1.Appearance.HeaderPanel.ForeColor = DevExpress.LookAndFeel.DXSkinColors.ForeColors.ControlText; |
| | | gridView1.PopupMenuShowing += (s, e) => |
| | | { |
| | | if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column) |
| | | { |
| | | GridViewColumnMenu menu = e.Menu as GridViewColumnMenu; |
| | | if (menu != null) |
| | | { |
| | | string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" }; |
| | | for (int i = menu.Items.Count - 1; i >= 0; i--) |
| | | { |
| | | string _caption = menu.Items[i].Caption; |
| | | if (!ary.Contains(_caption)) |
| | | { |
| | | menu.Items.Remove(menu.Items[i]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | gridView1.OptionsView.ShowGroupPanel = false; |
| | | gridView1.OptionsCustomization.AllowGroup = false; |
| | | // gridView1.Appearance.HeaderPanel.ForeColor = DevExpress.LookAndFeel.DXSkinColors.ForeColors.ControlText; |
| | | gridView1.OptionsView.ColumnAutoWidth = false;//自动调整列宽 |
| | | foreach (GridColumn column in gridView1.Columns) |
| | | { |
| | | column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; |
| | | column.OptionsColumn.AllowEdit = true; |
| | | column.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains; |
| | | // column.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains; |
| | | column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; |
| | | column.OptionsFilter.ImmediateUpdateAutoFilter = false; |
| | | if (column.Tag == null || column.Tag.ToString().EndsWith("edit")) |
| | |
| | | //} |
| | | } |
| | | }; |
| | | |
| | | } |
| | | private static void ActiveEditor_MouseUp(object sender, MouseEventArgs e) |
| | | { |
| | |
| | | edit.SelectAll(); |
| | | } |
| | | |
| | | public static void SetTabParameter(GridView gridView1, DevExpress.XtraTab.XtraTabControl xtraTabControl1, UcPageBar pageBar1, DelegateGetModel action = null, DelegateGetList page = null) |
| | | public static void SetGridLayout(GridView gridView1) |
| | | { |
| | | foreach (GridColumn column in gridView1.Columns) |
| | | { |
| | | if (column.Width > 500) |
| | | column.Width = 500; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置选项卡 |
| | | /// </summary> |
| | | /// <param name="gridView1"></param> |
| | | /// <param name="xtraTabControl1"></param> |
| | | /// <param name="pageBar1"></param> |
| | | /// <param name="action"></param> |
| | | /// <param name="page"></param> |
| | | public static void SetTabParameter(GridView gridView1, DevExpress.XtraTab.XtraTabControl xtraTabControl1, UcPageBar pageBar1, DelegateGetModel action = null, DelegateGetList page = null,Label lbGuid=null) |
| | | { |
| | | xtraTabControl1.SelectedPageChanged += (s, e) => |
| | | { |
| | |
| | | } |
| | | if (xtraTabControl1.SelectedTabPageIndex == 0) |
| | | { |
| | | // page(pageBar1.CurrentPage); |
| | | page(pageBar1.CurrentPage); |
| | | int rowHandle = 0; |
| | | rowHandle = gridView1.LocateByValue(1, gridView1.Columns["guid"], lbGuid.Text); |
| | | if (rowHandle < 0) |
| | | rowHandle = 0; |
| | | gridView1.FocusedRowHandle = rowHandle ; |
| | | } |
| | | }; |
| | | } |
| | |
| | | /// <param name="icoName"></param> |
| | | public static void SetGridViewParameterMx(GridView gridView1) |
| | | { |
| | | gridView1.PopupMenuShowing += (s, e) => |
| | | { |
| | | if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column) |
| | | { |
| | | GridViewColumnMenu menu = e.Menu as GridViewColumnMenu; |
| | | if (menu != null) |
| | | { |
| | | string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" }; |
| | | for (int i = menu.Items.Count - 1; i >= 0; i--) |
| | | { |
| | | string _caption = menu.Items[i].Caption; |
| | | if (!ary.Contains(_caption)) |
| | | { |
| | | menu.Items.Remove(menu.Items[i]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | gridView1.OptionsView.ShowGroupPanel = false; |
| | | gridView1.OptionsCustomization.AllowGroup = false; |
| | | |
| | | // gridView1.OptionsView.Alignment = DataGridViewContentAlignment.MiddleLeft; |
| | | foreach (GridColumn column in gridView1.Columns) |
| | | { |
| | |
| | | Regex regex = new Regex("^[0-9]+$"); |
| | | return regex.IsMatch(str); |
| | | } |
| | | |
| | | private static void getGridViewConfig(GridView gridView1, string namespaceFullName) |
| | | { |
| | | gridView1.OptionsView.ShowGroupPanel = false; |
| | | // gridView1.OptionsMenu.EnableColumnMenu = false; |
| | | gridView1.OptionsCustomization.AllowGroup = false; |
| | | if (string.IsNullOrEmpty(namespaceFullName)) return; |
| | | var _obj = new |
| | | { |
| | | formPath = namespaceFullName, |
| | | }; |
| | | try |
| | | { |
| | | string strJson = UtilityHelper.HttpPost("", "Fm/GetModel", JsonConvert.SerializeObject(_obj)); |
| | | ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); |
| | | if (_rtn.rtnCode > 0) |
| | | { |
| | | JObject _job = JObject.Parse(strJson); |
| | | JArray array = new JArray(); |
| | | foreach (var a in _job["rtnData"]["list"]) |
| | | { |
| | | array.Add(a); |
| | | } |
| | | foreach (GridColumn column in gridView1.Columns) |
| | | { |
| | | JToken john = array.FirstOrDefault(t => t["controlId"].ToString().ToUpper() == column.Name.ToString().Trim().ToUpper()); |
| | | if (john != null) |
| | | { |
| | | string controlIdx = john["controlIdx"].ToString(); |
| | | string controlVisible = john["controlVisible"].ToString(); |
| | | if (!string.IsNullOrEmpty(controlIdx)) |
| | | column.VisibleIndex = int.Parse(controlIdx); |
| | | if (!string.IsNullOrEmpty(controlVisible)) |
| | | column.Visible = bool.Parse(controlVisible); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | ToolBox.MsgHelper.Warning("提示:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | } |
| | | |
| | | public CboItemEntity(string val, string text) |
| | | public CboItemEntity(string val, string text, string fType = "") |
| | | { |
| | | Text = text; |
| | | Value = val; |
| | | FType = fType; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 对象值 |
| | | /// </summary> |
| | | public object Value { get; set; } = ""; |
| | | |
| | | public object FType { get; set; } = ""; |
| | | |
| | | public override string ToString() |
| | | { |
| | |
| | | /// <param name="operDec">操作符备注</param> |
| | | /// <param name="val"></param> |
| | | public FilterEntity(string id, string idDec, string oper, |
| | | string operDec, string val) |
| | | string operDec, string val, string type) |
| | | { |
| | | fileId = id; |
| | | fileIdDec = idDec; |
| | | fileOper = oper; |
| | | fileOperDec = operDec; |
| | | fileValue = val; |
| | | fileType = type; |
| | | } |
| | | |
| | | public string fileId { get; set; } |
| | |
| | | public string fileOperDec { get; set; } |
| | | |
| | | public string fileValue { get; set; } |
| | | |
| | | public string fileType { get; set; } |
| | | } |
| | | } |