none
Grid "Invalid column name: " al presionar un vinculo RRS feed

  • Pregunta

  • Buen día

    Mi problema surge cuando presiono un vinculo en el Grid me da el error  "Invalid column name: "

    El grid lo genero en Page_Init, en principio me carga bien los datos, pero cuando doy click sobre uno de los vinculos es cuando tengo el problema

    Esta parte es donde creo el grid

    protected void Page_Init(Object sender, EventArgs e)
        {
            grdLista.Dispose();
            grdLista = new RadGrid();
            grdLista.ID = "RadGrid1";
            PlaceHolder1.Controls.Add(grdLista);
    
            grdLista.AllowPaging = true;
            grdLista.AllowCustomPaging = false;
            grdLista.AutoGenerateColumns = false;
            grdLista.CellSpacing = 0;
            grdLista.GridLines = GridLines.None;
            grdLista.PageSize = 15;
            grdLista.Skin = "CustomLms";
            grdLista.EnableEmbeddedSkins = false;
            grdLista.Width = Unit.Percentage(100);
            grdLista.PagerStyle.Mode = GridPagerMode.NumericPages;
            grdLista.AllowFilteringByColumn = false;
            grdLista.AllowSorting = false;
            grdLista.HeaderStyle.BorderWidth = 0;
            grdLista.ItemStyle.BorderWidth = 0;
            grdLista.ShowGroupPanel = true;
            grdLista.ShowFooter = true;
            grdLista.HeaderStyle.CssClass = "grid-header";
            grdLista.ItemStyle.CssClass = "grid-item";
            grdLista.GroupingSettings.ShowUnGroupButton = true;
            grdLista.GroupingSettings.RetainGroupFootersVisibility = true;
            grdLista.ItemDataBound += new GridItemEventHandler(grdLista_ItemDataBound);
            grdLista.NeedDataSource += new GridNeedDataSourceEventHandler(grdLista_NeedDataSource);
            grdLista.MasterTableView.NoMasterRecordsText = "";
            grdLista.MasterTableView.DataKeyNames = new string [] {"Nivel1"};
            grdLista.MasterTableView.ClientDataKeyNames = new string[] { "Nivel1" };
    
    
            if(IsPostBack)
            {
                ConfigurarRadGrid();
            }
            
        }
    Donde coloco el vinculo en el grid
     protected void grdLista_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item.ItemType == Telerik.Web.UI.GridItemType.Item
                   || e.Item.ItemType == Telerik.Web.UI.GridItemType.SelectedItem
                   || e.Item.ItemType == Telerik.Web.UI.GridItemType.AlternatingItem)
            {
                GridDataItem dataItem = e.Item as GridDataItem;
    
                 int intMaxLink = 0;
                // Obtenemos todos los Identificadores posibles
                ConVistaColDto[] conVistaColDtoArray = (ConVistaColDto[])CfSessionStateHandler.GetObject(DATASOURCE_MIGAS);
    
                // El ultimo Link se desactiva
                if (null != conVistaColDtoArray)
                    intMaxLink = conVistaColDtoArray.Count();
    
                DataRowView row = (DataRowView)e.Item.DataItem;
                if (int.Parse(hfNivel.Value) < intMaxLink || int.Parse(hfNivel.Value) == 0)
                {
                    e.Item.Cells[2].Text = "<a href=\"javascript:cargarVisor(" + (e.Item.ItemIndex + 1) + ",'" + grdLista.Columns[0].HeaderText + ": " + row[0].ToString() + "' )\"> " 
                                                + "<img alt='' class='icoPointer' src='../images/ico_transparente.gif' border='0' width='8px' >"
                                                + row[0].ToString() + "</a>";
                }
            }
        }
    La configuración del grid
    private void ConfigurarRadGrid()
        {
            DataTable dataTable = (DataTable)CfSessionStateHandler.GetObject(DATASOURCE_EXPPART);
            String[] ColumnasNombreIgual = new String[] { "Nivel1", "Nivel2", "Nivel2", "Subdivision1", "Subdivision2", "Subdivision3", "Cod_Empresa", "Localidad", "Puesto" };
            List<string> lstAgrupadores = new List<string>();
    
            if( dataTable != null)
            {
                GridColumnGroup boundColumnGroup = new GridColumnGroup();
                GridBoundColumn boundColumn;
    
                /*
                GridGroupByExpression groupByExpression = new GridGroupByExpression();
                GridGroupByField groupByField = new GridGroupByField();
                groupByField.FieldAlias = dataTable.Columns[0].ToString();
                groupByField.FieldName = dataTable.Columns[0].ToString();
                groupByExpression.SelectFields.Add(groupByField);
                groupByExpression.GroupByFields.Add(groupByField);
                grdLista.MasterTableView.GroupByExpressions.Add(groupByExpression);
                */
    
                if (dataTable.TableName == ConVistaReporteEbl.TIPO_BENEFICIOS)
                {
                    int idBeneficio = 0, idBeneficioAux = 0;
                    // Recorremos la Columnas
                    foreach (DataColumn dc in dataTable.Columns)
                    {
                        boundColumn = new GridBoundColumn();
    
                        if(!ColumnasNombreIgual.Contains(dc.ColumnName))
                        {
                            int.TryParse(dc.ColumnName.Substring(dc.ColumnName.Length - 2, 2), out idBeneficio);
    
                            ConBeneficioEbl conBeneficioEbl = new ConBeneficioEbl(this.Page.User.Identity.Name);
                            ConBeneficioDto conBeneficioDto = conBeneficioEbl.Locate(RecuperarProgramaEnContexto().IdProgBenef, RecuperarEjercicioEnContexto().IdEjercicio, idBeneficio);
    
                            boundColumn.DataField = dc.ColumnName;
    
                            if (idBeneficio != idBeneficioAux)
                            {
                                if (idBeneficioAux != 0 )
                                    grdLista.MasterTableView.ColumnGroups.Add(boundColumnGroup);
                                boundColumnGroup = new GridColumnGroup();
                            }
                                
                            boundColumnGroup.HeaderText = conBeneficioDto.NombreOpcion;
                            boundColumnGroup.Name = "Beneficio_" + conBeneficioDto.IdBeneficio;
                            boundColumnGroup.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumnGroup.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    
                            boundColumn.UniqueName = dc.ColumnName;
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item-Izq";
                            boundColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                            boundColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                            boundColumn.ItemStyle.Width = 100;
    
                            //if(dc.ColumnName == dataTable.Columns[0].ColumnName)
                                
    
                            if(dc.ColumnName.Contains("Porcentaje_"))
                                boundColumn.DataFormatString = "{0:###,##0}%";
                            else
                                boundColumn.DataFormatString = "{0:###,##0}";
    
                            boundColumn.ColumnGroupName = "Beneficio_" + conBeneficioDto.IdBeneficio;
                            boundColumn.HeaderText = dc.ColumnName.Replace("_" + idBeneficio.ToString(), string.Empty);
    
                            idBeneficioAux = idBeneficio;
                            idBeneficio = 0;
                        }
                        else
                        {
                            boundColumn.DataField = dc.ColumnName;
                            boundColumn.HeaderText = dc.ColumnName;
                            boundColumn.UniqueName = dc.ColumnName;
                            boundColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumn.ItemStyle.Width = 200;
                        }
    
                        grdLista.MasterTableView.Columns.Add(boundColumn);
                    }
                    
                    grdLista.MasterTableView.ColumnGroups.Add(boundColumnGroup);
                }
                else if (dataTable.TableName == ConVistaReporteEbl.TIPO_CASOS_SEG)
                {
                    int idCasoSeg, idCasoSegAux = 0;
                    // Recorremos la Columnas
                    foreach (DataColumn dc in dataTable.Columns)
                    {
                        boundColumn = new GridBoundColumn();
    
                        if (!ColumnasNombreIgual.Contains(dc.ColumnName))
                        {
                            int.TryParse(dc.ColumnName.Substring(dc.ColumnName.Length - 2, 2), out idCasoSeg);
    
                            OpeCasoSegEbl opeCasoSegEbl = new OpeCasoSegEbl(this.Page.User.Identity.Name);
                            OpeCasoSegDto opeCasoSegDto = opeCasoSegEbl.Locate(idCasoSeg);
    
                            boundColumn.DataField = dc.ColumnName;
    
                            if (idCasoSeg != idCasoSegAux)
                            {
                                if (idCasoSegAux != 0)
                                    grdLista.MasterTableView.ColumnGroups.Add(boundColumnGroup);
                                boundColumnGroup = new GridColumnGroup();
                            }
    
                            boundColumnGroup.HeaderText =  opeCasoSegDto.TituloCasoSeg;
                            boundColumnGroup.Name = "Caso_" + opeCasoSegDto.IdCasoSeg;
                            boundColumnGroup.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumnGroup.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item-Izq";
                            boundColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                            boundColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                            boundColumn.ItemStyle.Width = 100;
    
                            if (dc.ColumnName.Contains("Porcentaje_"))
                                boundColumn.DataFormatString = "{0:###,##0}%";
                            else
                                boundColumn.DataFormatString = "{0:###,##0}";
    
                            boundColumn.ColumnGroupName = "Caso_" + opeCasoSegDto.IdCasoSeg;
                            boundColumn.HeaderText = dc.ColumnName.Replace("_" + idCasoSeg.ToString(), string.Empty);
    
                            idCasoSegAux = idCasoSeg;
                            idCasoSeg = 0;
                        }
                        else
                        {
                            boundColumn.DataField = dc.ColumnName;
                            boundColumn.HeaderText = dc.ColumnName;
                            boundColumn.UniqueName = dc.ColumnName;
                            boundColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumn.ItemStyle.Width = 200;
                        }
    
                        grdLista.MasterTableView.Columns.Add(boundColumn);
                    }
    
                    grdLista.MasterTableView.ColumnGroups.Add(boundColumnGroup);
                }
                else
                {
                    foreach (DataColumn dc in dataTable.Columns)
                    {
                        boundColumn = new GridBoundColumn();
    
                        if (!ColumnasNombreIgual.Contains(dc.ColumnName))
                        {
                            boundColumn.DataField = dc.ColumnName;
                            boundColumn.HeaderText = dc.ColumnName;
                            boundColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumn.ItemStyle.Width = 100;
                        }
                        else
                        {
                            boundColumn.DataField = dc.ColumnName;
                            boundColumn.HeaderText = dc.ColumnName;
                            boundColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                            boundColumn.HeaderStyle.CssClass = "grid-header Header-Item";
                            boundColumn.ItemStyle.Width = 200;
                        }
    
                        grdLista.MasterTableView.Columns.Add(boundColumn);
                    }   
                }
            }
    De antemano muchas gracias

    miércoles, 27 de enero de 2016 23:05