protected void OnDataBound(object sender, EventArgs e) { if (dgRelatorio.HeaderRow == null) { return; } if (dgRelatorio.HeaderRow.Parent.Controls.Count == 0) { return; } var row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal); var r = dgRelatorio.HeaderRow.Parent.Controls[0]; //estou assumindo que as colunas estão na ordem do chklistacamposvisiveis foreach (ListItem item in chkListaCamposVisiveis.Items) { if (item.Value.IndexOf("MD__") >= 0) { continue; } var c = (DataControlFieldHeaderCell)r.Controls[0]; if (c.Text != item.Text && c.ContainingField.HeaderText != item.Text && c.Text != item.Value) { continue; } c.RowSpan = 2; r.Controls.Remove(r.Controls[0]); row.Controls.Add(c); } //pega os modulos para poder fazer o group dos modulos var manterModulosProgramas = new ManterModulo(); IList <Dominio.Classes.Modulo> ls; var idPrograma = string.IsNullOrEmpty(txtPrograma.Text) ? 0 : int.Parse(txtPrograma.Text); var idOferta = string.IsNullOrWhiteSpace(cbxOfertas.SelectedValue) ? 0 : int.Parse(cbxOfertas.SelectedValue); var idModulo = string.IsNullOrWhiteSpace(cbxModulos.SelectedValue) ? 0 : int.Parse(cbxModulos.SelectedValue); if (idModulo != 0) { ls = new List <Modulo> { manterModulosProgramas.ObterPorId(idModulo) }; } else if (idOferta != 0) { ls = manterModulosProgramas.ObterPorCapacitacao(idOferta); } else if (idPrograma != 0) { ls = manterModulosProgramas.ObterPorPrograma(idPrograma); } else { ls = manterModulosProgramas.ObterTodos(); } foreach (var item in ls) { //calcula o columnSpan de acordo com a quantidade de colunas visiveis var qnt = chkListaCamposVisiveis.Items.Cast <ListItem>().Count(item2 => item2.Value.LastIndexOf("__" + item.ID + "__") != -1 && item2.Selected); var cell = new TableHeaderCell { Text = item.Nome, ColumnSpan = qnt }; row.Controls.Add(cell); } dgRelatorio.HeaderRow.Parent.Controls.AddAt(0, row); }
private IDictionary <string, string> AtualizarListaCamposVisiveis() { var temp = new ListItemCollection(); foreach (ListItem item in chkListaCamposVisiveis.Items) { temp.Add(item); } //pegar lista já marcada nos checkbox var manterModulosProgramas = new ManterModulo(); IList <Dominio.Classes.Modulo> ls; var resultado = new Dictionary <string, string>(); var idPrograma = string.IsNullOrEmpty(txtPrograma.Text) ? 0 : int.Parse(txtPrograma.Text); var idOferta = string.IsNullOrWhiteSpace(cbxOfertas.SelectedValue) ? 0 : int.Parse(cbxOfertas.SelectedValue); var idModulo = string.IsNullOrWhiteSpace(cbxModulos.SelectedValue) ? 0 : int.Parse(cbxModulos.SelectedValue); if (idModulo != 0) { ls = new List <Modulo> { manterModulosProgramas.ObterPorId(idModulo) }; } else if (idOferta != 0) { ls = manterModulosProgramas.ObterPorCapacitacao(idOferta); WebFormHelper.PreencherLista(ls, cbxModulos, true); } else if (idPrograma != 0) { ls = manterModulosProgramas.ObterPorPrograma(idPrograma); } else { ls = manterModulosProgramas.ObterTodos(); } foreach (var item in ls) { var itemPrazo = new ListItem { Selected = true, Text = item.Nome + " - Prazo", Value = "MD__" + RemoveExtraChars(item.Nome) + "__prazo__" + item.ID + "__" }; var itemSolucoesInscritas = new ListItem { Selected = true, Text = item.Nome + " - Soluções Inscritas", Value = "MD__" + RemoveExtraChars(item.Nome) + "__SolucoesInscritas__" + item.ID + "__" }; var itemSolucoesConcluidas = new ListItem { Selected = true, Text = item.Nome + " - Soluções Concluídas", Value = "MD__" + RemoveExtraChars(item.Nome) + "__SolucoesConcluidas__" + item.ID + "__" }; _lsItens.Add(itemPrazo); _lsItens.Add(itemSolucoesInscritas); _lsItens.Add(itemSolucoesConcluidas); resultado.Add(itemPrazo.Value, item.Nome); resultado.Add(itemSolucoesInscritas.Value, item.Nome); resultado.Add(itemSolucoesConcluidas.Value, item.Nome); } WebFormHelper.PreencherLista(_lsItens, chkListaCamposVisiveis); foreach (ListItem item in chkListaCamposVisiveis.Items) { var valor = true; if (temp.Count > 0) { var item1 = item; foreach (var tmp in temp.Cast <ListItem>().Where(tmp => tmp.Value == item1.Value)) { valor = tmp.Selected; break; } } item.Selected = valor; } foreach (var item in ls) { foreach (var item2 in _lsItens.Cast <ListItem>().Where(item2 => item2.Text.IndexOf(item.Nome) >= 0)) { item2.Text = item2.Text.Replace(item.Nome + " - ", ""); } } dgRelatorio.Columns.Clear(); foreach (ListItem item in _lsItens) { dgRelatorio.Columns.Add(new BoundField { HeaderText = item.Text, DataField = item.Value, SortExpression = item.Value }); } return(resultado); }