public static void CambiarAnchoColumnas(this RadGridView gvw, string[] nombreColumnas, params double[] porcentajes) { gvw.AutoSize = false; foreach (string nombre in nombreColumnas) { if (!gvw.Columns.Contains(nombre)) { throw new ArgumentException(String.Format("La columna \"{0}\" no se encuentra en la GridView", nombre)); } } try { if (gvw.Tag == null) { EventHandler handler = delegate { try { gvw.CambiarAnchoColumnas(nombreColumnas, porcentajes); } catch { throw; } }; gvw.SizeChanged += handler; gvw.RowHeightChanged += (s, e) => { gvw.VerticalScrollState = ScrollState.AutoHide; }; gvw.ColumnWidthChanged += (s, e) => { gvw.HorizontalScrollState = ScrollState.AutoHide; }; gvw.Tag = gvw.AutoSizeRows; if (gvw.AutoSizeRows) { PaintEventHandler enter = null; enter = (sender, e) => { if (gvw.IsDisplayed) { try { handler(gvw, e); gvw.Paint -= enter; } catch { throw; } } }; gvw.Paint += enter; return; } } bool offset; porcentajes = ValidarPorcentajes(nombreColumnas.Length, porcentajes); int width = ObtenerAnchoDeTrabajo(gvw, nombreColumnas.Length, out offset); int[] c = CalcularPorcentajes(porcentajes, width); int i = -1; foreach (string columna in nombreColumnas) { gvw.Columns[columna].Width = c[++i]; } gvw.BackColor = gvw.TableElement.BackColor = System.Drawing.Color.Transparent; if (offset) { gvw.HorizontalScrollState = ScrollState.AlwaysHide; gvw.VerticalScrollState = ScrollState.AlwaysShow; } else { gvw.HorizontalScrollState = gvw.VerticalScrollState = ScrollState.AlwaysHide; } } catch { throw; } }