/// <summary> /// Renders the contents inside the control begin and end tags. /// </summary> protected override void RenderContents(IHtmlWriter writer, RenderContext context) { var dataSourceBinding = GetDataSourceBinding(); if (RenderOnServer) { // render on server var index = 0; foreach (var child in Children) { context.PathFragments.Push(dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty) + "[" + index + "]"); Children[index].Render(writer, context); context.PathFragments.Pop(); index++; } } else { // render on client var placeholder = new DataItemContainer { DataContext = null }; placeholder.SetValue(Internal.IsDataContextBoundaryProperty, true); Children.Add(placeholder); ItemTemplate.BuildContent(context.RequestContext, placeholder); context.PathFragments.Push(dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty) + "[$index]"); placeholder.Render(writer, context); context.PathFragments.Pop(); } }
/// <summary> /// Performs the data-binding and builds the controls inside the <see cref="Repeater"/>. /// </summary> private void DataBind(RedwoodRequestContext context) { Children.Clear(); var dataSourceBinding = GetDataSourceBinding(); var dataSourcePath = dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty); var index = 0; var dataSource = DataSource; if (dataSource != null) { foreach (var item in GetIEnumerableFromDataSource(dataSource)) { var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetBinding(DataContextProperty, new ValueBindingExpression(dataSourcePath + "[" + index + "]")); Children.Add(placeholder); ItemTemplate.BuildContent(context, placeholder); index++; } } }
private void DataBind(RedwoodRequestContext context) { Children.Clear(); var dataSourceBinding = GetDataSourceBinding(); dataSourcePath = dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty); var dataSource = DataSource; string sortCommandPath = ""; if (dataSource is IGridViewDataSet) { sortCommandPath = dataSourcePath + ".SetSortExpression"; } else { var sortCommandBinding = GetCommandBinding(SortChangedProperty); if (sortCommandBinding != null) { sortCommandPath = sortCommandBinding.Expression; } } var index = 0; if (dataSource != null) { // create header row CreateHeaderRow(context, sortCommandPath); foreach (var item in GetIEnumerableFromDataSource(dataSource)) { // create row var placeholder = new DataItemContainer { DataItemIndex = index }; placeholder.SetBinding(DataContextProperty, new ValueBindingExpression(dataSourcePath + "[" + index + "]")); Children.Add(placeholder); CreateRow(context, placeholder); index++; } } }
protected override void RenderContents(IHtmlWriter writer, RenderContext context) { if (Children.Count == 0) return; // render the header Children[0].Render(writer, context); // render body var dataSourceBinding = GetDataSourceBinding(); if (!RenderOnServer) { var expression = dataSourceBinding.TranslateToClientScript(this, DataSourceProperty); writer.AddKnockoutForeachDataBind(expression); } writer.RenderBeginTag("tbody"); // render contents if (RenderOnServer) { // render on server var index = 0; foreach (var child in Children.Skip(1)) { context.PathFragments.Push(dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty) + "[" + index + "]"); Children[index].Render(writer, context); context.PathFragments.Pop(); index++; } } else { // render on client for (var i = Children.Count - 1; i > 0; i--) { Children.RemoveAt(i); } var placeholder = new DataItemContainer(); placeholder.SetValue(Internal.IsDataContextBoundaryProperty, true); Children.Add(placeholder); CreateRow(context.RequestContext, placeholder); context.PathFragments.Push(dataSourceBinding.GetViewModelPathExpression(this, DataSourceProperty) + "[$index]"); placeholder.Render(writer, context); context.PathFragments.Pop(); } writer.RenderEndTag(); }
private void CreateRow(RedwoodRequestContext context, DataItemContainer placeholder) { var row = new HtmlGenericControl("tr"); RedwoodControl container = row; foreach (var decorator in RowDecorators) { var decoratorInstance = decorator.Clone(); decoratorInstance.Children.Add(container); container = decoratorInstance; } placeholder.Children.Add(container); // create cells foreach (var column in Columns) { var cell = new HtmlGenericControl("td"); SetCellAttributes(column, cell, false); row.Children.Add(cell); column.CreateControls(context, cell); } }