protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding) { int numRows = base.CreateChildControls(dataSource, dataBinding); //no data rows created, create empty table if enabled if (numRows == 0 && ShowEmptyTable) { //create table Table table = new Table(); table.ID = this.ID; //create a new header row GridViewRow row = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); //convert the exisiting columns into an array and initialize DataControlField[] fields = new DataControlField[this.Columns.Count]; this.Columns.CopyTo(fields, 0); this.InitializeRow(row, fields); table.Rows.Add(row); //create the empty row row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal); TableCell cell = new TableCell(); cell.ColumnSpan = this.Columns.Count; cell.Width = Unit.Percentage(100); cell.Controls.Add(new LiteralControl(EmptyTableRowText)); row.Cells.Add(cell); table.Rows.Add(row); this.Controls.Add(table); } return numRows; }
protected override void CopyProperties(DataControlField newField) { ((CheckBoxField) newField).Text = this.Text; this._suppressPropertyThrows = true; ((CheckBoxField) newField)._suppressPropertyThrows = true; base.CopyProperties(newField); this._suppressPropertyThrows = false; ((CheckBoxField) newField)._suppressPropertyThrows = false; }
protected override void CopyProperties(DataControlField newField) { ((ButtonField) newField).CommandName = this.CommandName; ((ButtonField) newField).DataTextField = this.DataTextField; ((ButtonField) newField).DataTextFormatString = this.DataTextFormatString; ((ButtonField) newField).ImageUrl = this.ImageUrl; ((ButtonField) newField).Text = this.Text; base.CopyProperties(newField); }
protected override void CopyProperties(DataControlField newField) { ((AutoGeneratedField) newField).DataType = this.DataType; this._suppressPropertyThrows = true; ((AutoGeneratedField) newField)._suppressPropertyThrows = true; base.CopyProperties(newField); this._suppressPropertyThrows = false; ((AutoGeneratedField) newField)._suppressPropertyThrows = false; }
protected override void CopyProperties(DataControlField newField) { ((HyperLinkField) newField).DataNavigateUrlFields = this.DataNavigateUrlFields; ((HyperLinkField) newField).DataNavigateUrlFormatString = this.DataNavigateUrlFormatString; ((HyperLinkField) newField).DataTextField = this.DataTextField; ((HyperLinkField) newField).DataTextFormatString = this.DataTextFormatString; ((HyperLinkField) newField).NavigateUrl = this.NavigateUrl; ((HyperLinkField) newField).Target = this.Target; ((HyperLinkField) newField).Text = this.Text; base.CopyProperties(newField); }
protected override void CopyProperties(DataControlField newField) { ((TemplateField) newField).ConvertEmptyStringToNull = this.ConvertEmptyStringToNull; ((TemplateField) newField).AlternatingItemTemplate = this.AlternatingItemTemplate; ((TemplateField) newField).ItemTemplate = this.ItemTemplate; ((TemplateField) newField).FooterTemplate = this.FooterTemplate; ((TemplateField) newField).EditItemTemplate = this.EditItemTemplate; ((TemplateField) newField).HeaderTemplate = this.HeaderTemplate; ((TemplateField) newField).InsertItemTemplate = this.InsertItemTemplate; base.CopyProperties(newField); }
protected override void CopyProperties(DataControlField newField) { ((BoundField) newField).ApplyFormatInEditMode = this.ApplyFormatInEditMode; ((BoundField) newField).ConvertEmptyStringToNull = this.ConvertEmptyStringToNull; ((BoundField) newField).DataField = this.DataField; ((BoundField) newField).DataFormatString = this.DataFormatString; ((BoundField) newField).HtmlEncode = this.HtmlEncode; ((BoundField) newField).HtmlEncodeFormatString = this.HtmlEncodeFormatString; ((BoundField) newField).NullDisplayText = this.NullDisplayText; ((BoundField) newField).ReadOnly = this.ReadOnly; base.CopyProperties(newField); }
protected override void CopyProperties(DataControlField newField) { ((ImageField) newField).AlternateText = this.AlternateText; ((ImageField) newField).ConvertEmptyStringToNull = this.ConvertEmptyStringToNull; ((ImageField) newField).DataAlternateTextField = this.DataAlternateTextField; ((ImageField) newField).DataAlternateTextFormatString = this.DataAlternateTextFormatString; ((ImageField) newField).DataImageUrlField = this.DataImageUrlField; ((ImageField) newField).DataImageUrlFormatString = this.DataImageUrlFormatString; ((ImageField) newField).NullDisplayText = this.NullDisplayText; ((ImageField) newField).NullImageUrl = this.NullImageUrl; ((ImageField) newField).ReadOnly = this.ReadOnly; base.CopyProperties(newField); }
protected virtual void CopyProperties(DataControlField newField) { newField.AccessibleHeaderText = this.AccessibleHeaderText; newField.ControlStyle.CopyFrom(this.ControlStyle); newField.FooterStyle.CopyFrom(this.FooterStyle); newField.HeaderStyle.CopyFrom(this.HeaderStyle); newField.ItemStyle.CopyFrom(this.ItemStyle); newField.FooterText = this.FooterText; newField.HeaderImageUrl = this.HeaderImageUrl; newField.HeaderText = this.HeaderText; newField.InsertVisible = this.InsertVisible; newField.ShowHeader = this.ShowHeader; newField.SortExpression = this.SortExpression; newField.Visible = this.Visible; }
/// <summary> /// 绑定数据到GridView,当表格数据为空时显示表头 /// </summary> /// <param name="gridview"></param> /// <param name="dt">DataTable</param> /// <param name="dataKeys"></param> public static void GridViewDataBind(GridView gridview, DataTable dt, string[] dataKeyName, string emptyText) { EmptyText = emptyText; //记录为空重新构造Gridview if (dt.Rows.Count == 0) { gridview.DataSource = dt; gridview.DataBind(); if (gridview.EmptyDataTemplate != null) { GridViewRow rowHeader = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); DataControlField[] tempDataControlField = new DataControlField[gridview.Columns.Count]; int i = 0; foreach (DataControlField field in gridview.Columns) { tempDataControlField[i] = field; i++; } InitializeRow(gridview, rowHeader, tempDataControlField); gridview.Controls[0].Controls.Add(rowHeader); GridViewRow rowBody = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); TableCell cellBody = new TableCell(); cellBody.Text = EmptyText; cellBody.HorizontalAlign = HorizontalAlign.Center; cellBody.ColumnSpan = i; rowBody.Cells.Add(cellBody); rowBody.CssClass = ""; gridview.Controls[0].Controls.Add(rowBody); } } else { //数据不为空直接绑定 gridview.DataSource = dt; gridview.DataKeyNames = dataKeyName; gridview.DataBind(); } //重新绑定取消选择 gridview.SelectedIndex = -1; }
protected override void OnRowCreated(GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { string sControl; sControl = "~/Apps/EventService/Modules/row_default.ascx"; e.Row.Cells.Clear(); DataControlField field = this.Columns[0]; ((TemplateField)field).ItemTemplate = this.Page.LoadTemplate(sControl); DataControlField[] fields = new DataControlField[1] { field }; this.InitializeRow(e.Row, fields); } base.OnRowCreated(e); }
internal static TemplateField GetTemplateField(DataControlField dataControlField, DataBoundControl dataBoundControl) { TemplateField field = new TemplateField { HeaderText = dataControlField.HeaderText, HeaderImageUrl = dataControlField.HeaderImageUrl, AccessibleHeaderText = dataControlField.AccessibleHeaderText, FooterText = dataControlField.FooterText, SortExpression = dataControlField.SortExpression, Visible = dataControlField.Visible, InsertVisible = dataControlField.InsertVisible, ShowHeader = dataControlField.ShowHeader }; field.ControlStyle.CopyFrom(dataControlField.ControlStyle); field.FooterStyle.CopyFrom(dataControlField.FooterStyle); field.HeaderStyle.CopyFrom(dataControlField.HeaderStyle); field.ItemStyle.CopyFrom(dataControlField.ItemStyle); return field; }
protected override void CopyProperties(DataControlField newField) { ((CommandField) newField).CancelImageUrl = this.CancelImageUrl; ((CommandField) newField).CancelText = this.CancelText; ((CommandField) newField).DeleteImageUrl = this.DeleteImageUrl; ((CommandField) newField).DeleteText = this.DeleteText; ((CommandField) newField).EditImageUrl = this.EditImageUrl; ((CommandField) newField).EditText = this.EditText; ((CommandField) newField).InsertImageUrl = this.InsertImageUrl; ((CommandField) newField).InsertText = this.InsertText; ((CommandField) newField).NewImageUrl = this.NewImageUrl; ((CommandField) newField).NewText = this.NewText; ((CommandField) newField).SelectImageUrl = this.SelectImageUrl; ((CommandField) newField).SelectText = this.SelectText; ((CommandField) newField).UpdateImageUrl = this.UpdateImageUrl; ((CommandField) newField).UpdateText = this.UpdateText; ((CommandField) newField).ShowCancelButton = this.ShowCancelButton; ((CommandField) newField).ShowDeleteButton = this.ShowDeleteButton; ((CommandField) newField).ShowEditButton = this.ShowEditButton; ((CommandField) newField).ShowSelectButton = this.ShowSelectButton; ((CommandField) newField).ShowInsertButton = this.ShowInsertButton; base.CopyProperties(newField); }
protected virtual void AddFilters(GridViewRow headerRow, DataControlField[] fields) { for (int i = 0; i < Columns.Count; i++) { if (Columns[i].HeaderText.EndsWith(" ")) { AddFilter(i, headerRow.Cells[i], fields[i]); } } }
protected override void InitializeRow(GridViewRow row, DataControlField[] fields) { base.InitializeRow(row, fields); if (row.RowType == DataControlRowType.Header) { InitializeHeaderRow(row, fields); } }
protected override int CreateChildControls (IEnumerable data, bool dataBinding) { // clear GridView Controls.Clear (); table = null; rows = null; if (data == null) { return 0; } PagedDataSource dataSource; if (dataBinding) { DataSourceView view = GetData (); dataSource = new PagedDataSource (); dataSource.DataSource = data; if (AllowPaging) { dataSource.AllowPaging = true; dataSource.PageSize = PageSize; if (view.CanPage) { dataSource.AllowServerPaging = true; if (SelectArguments.RetrieveTotalRowCount) dataSource.VirtualCount = SelectArguments.TotalRowCount; } if (PageIndex >= dataSource.PageCount) pageIndex = dataSource.PageCount - 1; dataSource.CurrentPageIndex = PageIndex; } PageCount = dataSource.PageCount; } else { dataSource = new PagedDataSource (); dataSource.DataSource = data; if (AllowPaging) { dataSource.AllowPaging = true; dataSource.PageSize = PageSize; dataSource.CurrentPageIndex = PageIndex; } } bool createPager = AllowPaging && (PageCount >= 1) && PagerSettings.Visible; ArrayList list = new ArrayList (); // Creates the set of fields to show _dataEnumerator = null; ICollection fieldCollection = CreateColumns (dataSource, dataBinding); int fieldCount = fieldCollection.Count; DataControlField dcf; DataControlField[] fields = new DataControlField [fieldCount]; fieldCollection.CopyTo (fields, 0); for (int i = 0; i < fieldCount; i++) { dcf = fields [i]; dcf.Initialize (AllowSorting, this); if (EnableSortingAndPagingCallbacks) dcf.ValidateSupportsCallback (); } bool skip_first = false; IEnumerator enumerator; if (_dataEnumerator != null) { // replaced when creating bound columns enumerator = _dataEnumerator; skip_first = true; } else { enumerator = dataSource.GetEnumerator (); } // Main table creation while (skip_first || enumerator.MoveNext ()) { skip_first = false; object obj = enumerator.Current; if (list.Count == 0) { if (createPager && (PagerSettings.Position == PagerPosition.Top || PagerSettings.Position == PagerPosition.TopAndBottom)) { topPagerRow = CreatePagerRow (fieldCount, dataSource); OnRowCreated (new GridViewRowEventArgs (topPagerRow)); ContainedTable.Rows.Add (topPagerRow); if (dataBinding) { topPagerRow.DataBind (); OnRowDataBound (new GridViewRowEventArgs (topPagerRow)); } if (PageCount == 1) topPagerRow.Visible = false; } GridViewRow headerRow = CreateRow (-1, -1, DataControlRowType.Header, DataControlRowState.Normal); InitializeRow (headerRow, fields); OnRowCreated (new GridViewRowEventArgs (headerRow)); ContainedTable.Rows.Add (headerRow); if (dataBinding) { headerRow.DataBind (); OnRowDataBound (new GridViewRowEventArgs (headerRow)); } } DataControlRowState rstate = GetRowState (list.Count); GridViewRow row = CreateRow (list.Count, list.Count, DataControlRowType.DataRow, rstate); row.DataItem = obj; list.Add (row); InitializeRow (row, fields); OnRowCreated (new GridViewRowEventArgs (row)); ContainedTable.Rows.Add (row); if (dataBinding) { row.DataBind (); if (EditIndex == row.RowIndex) oldEditValues = new DataKey (GetRowValues (row, true, true)); DataKeyArrayList.Add (new DataKey (CreateRowDataKey (row), DataKeyNames)); OnRowDataBound (new GridViewRowEventArgs (row)); } } if (list.Count == 0) { GridViewRow emptyRow = CreateEmptyrRow (fieldCount); if (emptyRow != null) { OnRowCreated (new GridViewRowEventArgs (emptyRow)); ContainedTable.Rows.Add (emptyRow); if (dataBinding) { emptyRow.DataBind (); OnRowDataBound (new GridViewRowEventArgs (emptyRow)); } } return 0; } else { GridViewRow footerRow = CreateRow (-1, -1, DataControlRowType.Footer, DataControlRowState.Normal); InitializeRow (footerRow, fields); OnRowCreated (new GridViewRowEventArgs (footerRow)); ContainedTable.Rows.Add (footerRow); if (dataBinding) { footerRow.DataBind (); OnRowDataBound (new GridViewRowEventArgs (footerRow)); } if (createPager && (PagerSettings.Position == PagerPosition.Bottom || PagerSettings.Position == PagerPosition.TopAndBottom)) { bottomPagerRow = CreatePagerRow (fieldCount, dataSource); OnRowCreated (new GridViewRowEventArgs (bottomPagerRow)); ContainedTable.Rows.Add (bottomPagerRow); if (dataBinding) { bottomPagerRow.DataBind (); OnRowDataBound (new GridViewRowEventArgs (bottomPagerRow)); } if (PageCount == 1) bottomPagerRow.Visible = false; } } rows = new GridViewRowCollection (list); if (!dataBinding) return -1; if (AllowPaging) return dataSource.DataSourceCount; else return list.Count; }
/// <summary> /// Overridden. Copies the properties of the current HyperLinkField object to the specified object. /// </summary> /// <param name="newField"></param> protected override void CopyProperties(DataControlField newField) { base.CopyProperties(newField); HyperLinkField field = (HyperLinkField)newField; field.DataNavigateUrlFields = DataNavigateUrlFields; field.DataNavigateUrlFormatString = DataNavigateUrlFormatString; field.DataTextField = DataTextField; field.DataTextFormatString = DataTextFormatString; field.NavigateUrl = NavigateUrl; field.Target = Target; field.Text = Text; }
protected DataControlFieldCell(HtmlTextWriterTag tagKey, DataControlField containingField) : base(tagKey) { this._containingField = containingField; }
public abstract string GetNodeText(DataControlField dataControlField);
public bool Contains(DataControlField field) { return(default(bool)); }
protected override void CopyProperties (DataControlField newField) { base.CopyProperties (newField); ImageField field = (ImageField) newField; field.AlternateText = AlternateText; field.ConvertEmptyStringToNull = ConvertEmptyStringToNull; field.DataAlternateTextField = DataAlternateTextField; field.DataAlternateTextFormatString = DataAlternateTextFormatString; field.DataImageUrlField = DataImageUrlField; field.DataImageUrlFormatString = DataImageUrlFormatString; field.NullDisplayText = NullDisplayText; field.NullImageUrl = NullImageUrl; field.ReadOnly = ReadOnly; }
public void Remove(DataControlField field) { }
public void Add(DataControlField field) { }
public void Add(DataControlField field) { ((IList)this).Add(field); }
public void Remove(DataControlField field) { ((IList)this).Remove(field); }
public void Insert(int index, DataControlField field) { ((IList)this).Insert(index, field); }
protected override void CopyProperties(DataControlField newField) { ((ExpressionField)newField).Expression = this.Expression; base.CopyProperties(newField); }
public int IndexOf(DataControlField field) { return(default(int)); }
public int IndexOf(DataControlField field) { return(((IList)this).IndexOf(field)); }
public void Insert(int index, DataControlField field) { }
private static void LocalizeDataControlField(DataControlField controlField, string resourceFile) { string localizedText; //Localize Header Text if (!string.IsNullOrEmpty(controlField.HeaderText)) { localizedText = GetString((controlField.HeaderText + ".Header"), resourceFile); if (!string.IsNullOrEmpty(localizedText)) { controlField.HeaderText = localizedText; controlField.AccessibleHeaderText = controlField.HeaderText; } } if (controlField is TemplateField) { //do nothing } else if (controlField is ButtonField) { var button = (ButtonField)controlField; localizedText = GetString(button.Text, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { button.Text = localizedText; } } else if (controlField is CheckBoxField) { var checkbox = (CheckBoxField)controlField; localizedText = GetString(checkbox.Text, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { checkbox.Text = localizedText; } } else if (controlField is CommandField) { var commands = (CommandField)controlField; localizedText = GetString(commands.CancelText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.CancelText = localizedText; } localizedText = GetString(commands.DeleteText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.DeleteText = localizedText; } localizedText = GetString(commands.EditText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.EditText = localizedText; } localizedText = GetString(commands.InsertText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.InsertText = localizedText; } localizedText = GetString(commands.NewText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.NewText = localizedText; } localizedText = GetString(commands.SelectText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.SelectText = localizedText; } localizedText = GetString(commands.UpdateText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { commands.UpdateText = localizedText; } } else if (controlField is HyperLinkField) { var link = (HyperLinkField)controlField; localizedText = GetString(link.Text, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { link.Text = localizedText; } } else if (controlField is ImageField) { var image = (ImageField)controlField; localizedText = GetString(image.AlternateText, resourceFile); if (!string.IsNullOrEmpty(localizedText)) { image.AlternateText = localizedText; } } }
protected override void CopyProperties(DataControlField newField) { }
public abstract TemplateField CreateTemplateField(DataControlField dataControlField, DataBoundControl dataBoundControl);
internal DataControlFieldHeaderCell(DataControlField containerField, TableHeaderScope scope) : this(containerField) { this.scope = scope; }
protected TemplateField GetTemplateField(DataControlField dataControlField, DataBoundControl dataBoundControl) { return DataControlFieldHelper.GetTemplateField(dataControlField, dataBoundControl); }
public DataControlFieldHeaderCell(DataControlField containerField) : base(HtmlTextWriterTag.Th, containerField) { }
protected virtual void InitializeRow (GridViewRow row, DataControlField[] fields) { DataControlCellType ctype; bool accessibleHeader = false; switch (row.RowType) { case DataControlRowType.Header: ctype = DataControlCellType.Header; accessibleHeader = UseAccessibleHeader; break; case DataControlRowType.Footer: ctype = DataControlCellType.Footer; break; default: ctype = DataControlCellType.DataCell; break; } for (int n=0; n<fields.Length; n++) { DataControlField field = fields [n]; DataControlFieldCell cell; if (((field is BoundField) && ((BoundField)field).DataField == RowHeaderColumn) || accessibleHeader) cell = new DataControlFieldHeaderCell (field, accessibleHeader ? TableHeaderScope.Column : TableHeaderScope.Row); else cell = new DataControlFieldCell (field); row.Cells.Add (cell); field.InitializeCell (cell, ctype, row.RowState, row.RowIndex); } }
public DataControlFieldCell(DataControlField containingField) { this._containingField = containingField; }
protected virtual new void InitializeRow(DetailsViewRow row, DataControlField field) { }
public DataControlFieldCell(DataControlField containingField) { _containingField = containingField; }
protected virtual void InitializeHeaderRow(GridViewRow row, DataControlField[] fields) { AddGlyph(this, row); AddFilters(row, fields); }
protected DataControlFieldCell(HtmlTextWriterTag tagKey, DataControlField containingField) : base(tagKey) { _containingField = containingField; }
protected virtual void AddFilter(int columnIndex, TableCell headerCell, DataControlField field) { if (headerCell.Controls.Count == 0) { LiteralControl ltlHeaderText = new LiteralControl(headerCell.Text); headerCell.Controls.Add(ltlHeaderText); } LiteralControl ltlBreak = new LiteralControl("</br>"); headerCell.Controls.Add(ltlBreak); TextBox txtFilter = null; if (m_txtFilter.Contains(columnIndex)) { txtFilter = (TextBox)m_txtFilter[columnIndex]; } else { txtFilter = new TextBox(); txtFilter.ID = ID + "_txtFilter" + columnIndex.ToString();// +headerCell.ClientID; if (field.ItemStyle.Width.Value != 0.0) { txtFilter.Style.Add(HtmlTextWriterStyle.Width, Convert.ToString(field.ItemStyle.Width.Value - 40) + "px"); } else if (field.HeaderStyle.Width.Value != 0.0) { txtFilter.Style.Add(HtmlTextWriterStyle.Width, Convert.ToString(field.HeaderStyle.Width.Value - 40) + "px"); } txtFilter.Style.Add(HtmlTextWriterStyle.Height, "10px"); txtFilter.Style.Add(HtmlTextWriterStyle.FontSize, "9px"); m_txtFilter[columnIndex] = txtFilter; } DropDownList ddlFilter; if (m_ddlFilter.Contains(columnIndex)) { ddlFilter = (DropDownList)m_ddlFilter[columnIndex]; } else { ddlFilter = new DropDownList(); ddlFilter.ID = ID + "_ddlFilter" + columnIndex.ToString(); ddlFilter.Items.Add(" "); ddlFilter.Items.Add("="); ddlFilter.Items.Add("<"); ddlFilter.Items.Add(">"); ddlFilter.Items.Add("<="); ddlFilter.Items.Add(">="); ddlFilter.AutoPostBack = true; ddlFilter.SelectedIndexChanged += new EventHandler(this.HandleFilterCommand); //ddlFilter.SelectedIndex = 0; ddlFilter.Style.Add(HtmlTextWriterStyle.Width, "30px"); // ddlFilter.Height = new Unit("20px"); // ddlFilter.Style.Add(HtmlTextWriterStyle.Height, "8px"); // ddlFilter.Style.Add(HtmlTextWriterStyle.FontSize, "8px"); m_ddlFilter[columnIndex] = ddlFilter; } headerCell.Controls.Add(txtFilter); headerCell.Controls.Add(ddlFilter); }
protected override void CopyProperties (DataControlField newField) { base.CopyProperties (newField); ButtonFieldBase field = (ButtonFieldBase) newField; field.ButtonType = ButtonType; field.CausesValidation = CausesValidation; field.ShowHeader = ShowHeader; field.ValidationGroup = ValidationGroup; }
protected override void CopyProperties (DataControlField newField) { base.CopyProperties (newField); TemplateField field = (TemplateField) newField; field.AlternatingItemTemplate = AlternatingItemTemplate; field.ConvertEmptyStringToNull = ConvertEmptyStringToNull; field.EditItemTemplate = EditItemTemplate; field.FooterTemplate = FooterTemplate; field.HeaderTemplate = HeaderTemplate; field.InsertItemTemplate = InsertItemTemplate; field.ItemTemplate = ItemTemplate; }
public bool Contains(DataControlField field) { return(((IList)this).Contains(field)); }