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 && ShowWhenEmpty) { //create table Table table = new Table(); table.ID = this.ID; //convert the exisiting columns into an array and initialize DataControlField[] fields = new DataControlField[this.Columns.Count]; this.Columns.CopyTo(fields, 0); if (this.ShowHeader) { //create a new header row GridViewRow headerRow = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); this.InitializeRow(headerRow, fields); table.Rows.Add(headerRow); } //create the empty row GridViewRow emptyRow = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal); TableCell cell = new TableCell(); cell.ColumnSpan = this.Columns.Count; cell.Width = Unit.Percentage(100); if (!String.IsNullOrEmpty(EmptyDataText)) { cell.Controls.Add(new LiteralControl(EmptyDataText)); } if (this.EmptyDataTemplate != null) { EmptyDataTemplate.InstantiateIn(cell); } emptyRow.Cells.Add(cell); table.Rows.Add(emptyRow); if (this.ShowFooter) { //create footer row GridViewRow footerRow = base.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal); this.InitializeRow(footerRow, fields); table.Rows.Add(footerRow); } this.Controls.Clear(); this.Controls.Add(table); } return(numRows); }
private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; head = null; var dataSourceBinding = GetDataSourceBinding(); var dataSource = DataSource; var sortCommand = SortChanged; sortCommand ??= typeof(ISortableGridViewDataSet).IsAssignableFrom((GetBinding(DataSourceProperty) as IStaticValueBinding)?.ResultType) ? (Action <string?>)SortChangedCommand : null; sortCommand ??= s => throw new DotvvmControlException(this, "Cannot sort when DataSource is null."); CreateHeaderRow(context, sortCommand); var index = 0; if (dataSource != null) { foreach (var item in GetIEnumerableFromDataSource() !) { // create row var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetDataContextTypeFromDataSource(dataSourceBinding); placeholder.DataContext = item; placeholder.SetValue(Internal.PathFragmentProperty, GetPathFragmentExpression() + "/[" + index + "]"); placeholder.ID = index.ToString(); Children.Add(placeholder); CreateRowWithCells(context, placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetValue(EmptyData.VisibleProperty, GetValueRaw(VisibleProperty)); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }
/// <summary> /// GridView数据为空时呈现的样式 /// </summary> /// <param name="writer"> </param> protected virtual void RenderEmptyContent(HtmlTextWriter writer) { Table t = new Table(); //创建一个HTML的Table t.GridLines = GridLines; //设置Table的线型与GridView相同 t.BorderStyle = BorderStyle; //设置边界风格与GridView相同 t.BorderWidth = 0; //?? t.CellPadding = 1; t.CellSpacing = 1; t.HorizontalAlign = HorizontalAlign; //设置水平对齐风格与GridView相同 t.Width = Width; //设置Table宽度与GridView相同 t.CopyBaseAttributes(this); t.BorderColor = BorderColor; //设置边界颜色与GridView相同 t.EnableTheming = EnableTheming; //设置主题是否生效与GridView相同 t.ForeColor = ForeColor; //设置前景色与GridView相同 t.SkinID = SkinID; //设置皮肤样式与GridView相同 t.ToolTip = ToolTip; //设置提示信息与GridView相同 t.Visible = Visible; //设置是否可见与GridView相同 t.Font.CopyFrom(Font); //设置字体对象与GridView相同 //设置Table的层叠样式表 t.CssClass = EmptyDataTableCssClass != "" ? EmptyDataTableCssClass : CssClass; TableRow row = new TableRow(); //新建一个行 row.CssClass = EmptyDataTitleRowCssClass; //设置行的与层叠样式表 row.Height = 25; //将行添加到Table中 t.Rows.Add(row); //根据GridView中的字段创建Table行的单元格 foreach (DataControlField field in Columns) { if (field.Visible) //如果GridView中的该字段可见 { TableCell cell = new TableCell(); //创建单元格 cell.Text = field.HeaderText; //设置单元格文本 row.Cells.Add(cell); //将单元格添加到行中 } } TableRow row2 = new TableRow(); //新建第二行 row2.CssClass = EmptyDataContentRowCssClass; //设置行的与层叠样式表 t.Rows.Add(row2); TableCell msgCell = new TableCell(); if (EmptyDataTemplate != null) //如果GridView中设置了空模板 { EmptyDataTemplate.InstantiateIn(msgCell); } else { msgCell.Text = EmptyDataText; //设置单元格文本为空数据提示 } msgCell.HorizontalAlign = HorizontalAlign.Center; //设置单元格的水平对齐 msgCell.ColumnSpan = Columns.Count; //设置单元格的列合并 row2.Cells.Add(msgCell); t.RenderControl(writer); //将Table发送给HTML呈现流 }
private DotvvmControl GetEmptyItem(IDotvvmRequestContext context) { var dataSourceBinding = GetDataSourceBinding(); emptyDataContainer = new EmptyData(); emptyDataContainer.SetValue(EmptyData.RenderWrapperTagProperty, GetValueRaw(RenderWrapperTagProperty)); emptyDataContainer.SetValue(EmptyData.WrapperTagNameProperty, GetValueRaw(WrapperTagNameProperty)); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); return(emptyDataContainer); }
/// <summary> /// Performs the data-binding and builds the controls inside the <see cref="Repeater"/>. /// </summary> private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; var dataSourceBinding = GetDataSourceBinding(); var index = 0; var dataSource = DataSource; if (dataSource != null) { var itemBinding = GetItemBinding(); var bindingService = context.Configuration.ServiceLocator.GetService <BindingCompilationService>(); foreach (var item in GetIEnumerableFromDataSource()) { var placeholder = new DataItemContainer { DataItemIndex = index }; ItemTemplate.BuildContent(context, placeholder); placeholder.SetBinding(DataContextProperty, ValueBindingExpression.CreateBinding( bindingService, j => item, itemBinding.KnockoutExpression.AssignParameters(p => p == JavascriptTranslator.CurrentIndexParameter ? new CodeParameterAssignment(index.ToString(), OperatorPrecedence.Max) : default(CodeParameterAssignment)))); placeholder.SetValue(Internal.PathFragmentProperty, GetPathFragmentExpression() + "/[" + index + "]"); placeholder.ID = index.ToString(); Children.Add(placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetValue(EmptyData.RenderWrapperTagProperty, GetValueRaw(RenderWrapperTagProperty)); emptyDataContainer.SetValue(EmptyData.WrapperTagNameProperty, GetValueRaw(WrapperTagNameProperty)); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }
protected override void PerformDataBinding(System.Collections.IEnumerable data) { base.PerformDataBinding(data); if (data == null && this.DataItem != null) { data = new object[] { this.DataItem } } ; else if (data == null) { return; } foreach (var i in data) { _dataItemContainer.DataItem = i; if (i == null && EmptyDataTemplate != null) { EmptyDataTemplate.InstantiateIn(_dataItemContainer); } else { ItemTemplate.InstantiateIn(_dataItemContainer); } _dataItemContainer.DataBind(); if (i != null) { OrderedDictionary keyTable = this.KeyTable; if (keyTable != null) { keyTable.Clear(); string[] dataKeyNamesInternal = this.DataKeyNamesInternal; if (dataKeyNamesInternal != null && dataKeyNamesInternal.Length != 0) { foreach (string str in dataKeyNamesInternal) { object propertyValue = DataBinder.GetPropertyValue(i, str); keyTable.Add(str, propertyValue); } _dataKey = new DataKey(keyTable); } } } } this.ExtractRowValues(this.BoundFieldValues, false); }
/// <summary> /// Performs the data-binding and builds the controls inside the <see cref="Repeater"/>. /// </summary> private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; var dataSourceBinding = GetDataSourceBinding(); var index = 0; var dataSource = DataSource; if (dataSource != null) { var items = GetIEnumerableFromDataSource(dataSource).Cast <object>().ToArray(); var javascriptDataSourceExpression = dataSourceBinding.GetKnockoutBindingExpression(); foreach (var item in items) { var placeholder = new DataItemContainer { DataItemIndex = index }; ItemTemplate.BuildContent(context, placeholder); placeholder.SetBinding(DataContextProperty, GetItemBinding((IList)items, javascriptDataSourceExpression, index)); placeholder.SetValue(Internal.PathFragmentProperty, JavascriptCompilationHelper.AddIndexerToViewModel(GetPathFragmentExpression(), index)); placeholder.ID = index.ToString(); Children.Add(placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetValue(EmptyData.RenderWrapperTagProperty, GetValueRaw(RenderWrapperTagProperty)); emptyDataContainer.SetValue(EmptyData.WrapperTagNameProperty, GetValueRaw(WrapperTagNameProperty)); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }
protected override void CreateChildControls() { if (Items == null || Items.Count() == 0) { if (EmptyDataTemplate != null) { EmptyDataTemplate.InstantiateIn(this); } } else if (GenerateMethod != null) { int i = 0; foreach (object n in Items) { Controls.Add(GenerateMethod(i++, n)); } } ChildControlsCreated = true; }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Dummy control to which we parent all the data item controls Control containerControl = new Control(); IEnumerable dataItems = ViewData.Eval(Name) as IEnumerable; bool hasData = false; if (dataItems != null) { int index = 0; foreach (object dataItem in dataItems) { hasData = true; RepeaterItem repeaterItem = new RepeaterItem(index, dataItem) { ViewData = new ViewDataDictionary(dataItem), }; ItemTemplate.InstantiateIn(repeaterItem); containerControl.Controls.Add(repeaterItem); index++; } } if (!hasData) { // If there was no data, instantiate the EmptyDataTemplate Control emptyDataContainer = new Control(); EmptyDataTemplate.InstantiateIn(emptyDataContainer); containerControl.Controls.Add(emptyDataContainer); } Controls.Add(containerControl); containerControl.DataBind(); }
protected override void CreateChildControls() { if (Items == null || Items.Count() == 0) { if (EmptyDataTemplate != null) { EmptyDataTemplate.InstantiateIn(this); } } else { Controls.Clear(); foreach (var i in Items) { var r = new TableRow(); foreach (var c in Columns) { r.Controls.Add(c.RenderColumn(i)); } Controls.Add(r); } } ChildControlsCreated = true; }
protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding) { int rows = base.CreateChildControls(dataSource, dataBinding); // no data rows created, create empty table if enabled if (rows == 0 && (ShowFooterWhenEmpty || ShowHeaderWhenEmpty)) { // create the table Table table = CreateChildTable(); Controls.Clear(); Controls.Add(table); DataControlField[] fields; if (AutoGenerateColumns) { var source = new PagedDataSource { DataSource = dataSource }; ICollection autoGeneratedColumns = CreateColumns(source, true); fields = new DataControlField[autoGeneratedColumns.Count]; autoGeneratedColumns.CopyTo(fields, 0); } else { fields = new DataControlField[Columns.Count]; Columns.CopyTo(fields, 0); } TableRowCollection newRows = table.Rows; if (ShowHeaderWhenEmpty) { // create a new header row _headerRow = CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal); InitializeRow(_headerRow, fields, newRows); } // create the empty row GridViewRow emptyRow = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal); TableCell cell = new TableCell(); List <DataControlField> f = fields.Where(dataControlField => dataControlField.Visible).ToList(); cell.ColumnSpan = f.Count; //cell.Width = Unit.Percentage(100); // respect the precedence order if both EmptyDataTemplate // and EmptyDataText are both supplied ... if (EmptyDataTemplate != null) { EmptyDataTemplate.InstantiateIn(cell); } else if (!string.IsNullOrEmpty(EmptyDataText)) { cell.Controls.Add(new LiteralControl(EmptyDataText)); } emptyRow.Cells.Add(cell); GridViewRowEventArgs e = new GridViewRowEventArgs(emptyRow); OnRowCreated(e); newRows.Add(emptyRow); emptyRow.DataBind(); OnRowDataBound(e); emptyRow.DataItem = null; if (ShowFooterWhenEmpty && ShowFooter) { // create footer row _footerRow = CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal); InitializeRow(_footerRow, fields, newRows); newRows.Remove(emptyRow); } } return(rows); }
private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; head = null; var dataSourceBinding = GetDataSourceBinding(); var dataSource = DataSource; var sortCommand = dataSource is ISortableGridViewDataSet sortableSet && sortableSet.SortingOptions is ISortingOptions sortOptions ? expr => { if (sortOptions.SortExpression == expr) { sortOptions.SortDescending ^= true; } else { sortOptions.SortExpression = expr; sortOptions.SortDescending = false; } (sortableSet as IPageableGridViewDataSet)?.GoToFirstPage(); } : SortChanged; // WORKAROUND: DataSource is null => don't throw exception if (sortCommand == null && dataSource == null) { sortCommand = s => { throw new DotvvmControlException(this, "Cannot sort when DataSource is null."); }; } CreateHeaderRow(context, sortCommand); var index = 0; if (dataSource != null) { var itemBinding = GetItemBinding(); foreach (var item in GetIEnumerableFromDataSource()) { // create row var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetDataContextTypeFromDataSource(dataSourceBinding); placeholder.DataContext = item; placeholder.SetValue(Internal.PathFragmentProperty, GetPathFragmentExpression() + "/[" + index + "]"); placeholder.ID = index.ToString(); Children.Add(placeholder); CreateRowWithCells(context, placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetValue(EmptyData.VisibleProperty, GetValueRaw(VisibleProperty)); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }
private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; head = null; var dataSourceBinding = GetDataSourceBinding(); var dataSource = DataSource; Action <string> sortCommand = null; if (dataSource is IGridViewDataSet) { sortCommand = ((IGridViewDataSet)dataSource).SetSortExpression; } else { sortCommand = SortChanged; } // WORKAROUND: DataSource is null => don't throw exception if (sortCommand == null && dataSource == null) { sortCommand = s => { throw new Exception("can't sort null data source"); }; } CreateHeaderRow(context, sortCommand); var index = 0; if (dataSource != null) { // create header row var items = GetIEnumerableFromDataSource(dataSource); var javascriptDataSourceExpression = dataSourceBinding.GetKnockoutBindingExpression(); foreach (var item in items) { // create row var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetBinding(DataContextProperty, GetItemBinding((IList)items, javascriptDataSourceExpression, index)); placeholder.SetValue(Internal.PathFragmentProperty, JavascriptCompilationHelper.AddIndexerToViewModel(GetPathFragmentExpression(), index)); placeholder.ID = "i" + index; CreateRow(context, placeholder); Children.Add(placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }
private void DataBind(IDotvvmRequestContext context) { Children.Clear(); emptyDataContainer = null; head = null; var dataSourceBinding = GetDataSourceBinding(); var dataSource = DataSource; if (dataSource is IRefreshableGridViewDataSet refreshableDataSet) { CallGridViewDataSetRefreshRequest(refreshableDataSet); } var sortCommand = dataSource is ISortableGridViewDataSet sortableGridViewDataSet ? sortableGridViewDataSet.SetSortExpression : SortChanged; // WORKAROUND: DataSource is null => don't throw exception if (sortCommand == null && dataSource == null) { sortCommand = s => { throw new DotvvmControlException(this, "Cannot sort when DataSource is null."); }; } CreateHeaderRow(context, sortCommand); var index = 0; if (dataSource != null) { var itemBinding = GetItemBinding(); var bindingService = context.Configuration.ServiceLocator.GetService <BindingCompilationService>(); foreach (var item in GetIEnumerableFromDataSource()) { // create row var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetBinding(DataContextProperty, ValueBindingExpression.CreateBinding( bindingService, j => item, itemBinding.KnockoutExpression.AssignParameters(p => p == JavascriptTranslator.CurrentIndexParameter ? new CodeParameterAssignment(index.ToString(), OperatorPrecedence.Max) : default(CodeParameterAssignment)))); placeholder.SetValue(Internal.PathFragmentProperty, GetPathFragmentExpression() + "/[" + index + "]"); placeholder.ID = index.ToString(); Children.Add(placeholder); CreateRowWithCells(context, placeholder); index++; } numberOfRows = index; } else { numberOfRows = 0; } // add empty item if (EmptyDataTemplate != null) { emptyDataContainer = new EmptyData(); emptyDataContainer.SetBinding(DataSourceProperty, dataSourceBinding); EmptyDataTemplate.BuildContent(context, emptyDataContainer); Children.Add(emptyDataContainer); } }