Hi,
I have a gridvie which i sho in two modes some columns change visibility
:
                                I have a gridvie which i sho in two modes some columns change visibility
:
if
(_local)
{
radGridView1.Columns[
"colFirstSeen"].IsVisible = true;
radGridView1.Columns[
"colTrust"].IsVisible = true;
radGridView1.Columns["colAcknowledged"].IsVisible = true;;
}
else
{
radGridView1.Columns[
"colFirstSeen"].IsVisible = false
radGridView1.Columns["colFirstSeen"].VisibleInColumnChooser = false
radGridView1.Columns["colTrust"].IsVisible = false
;
radGridView1.Columns[
"colAcknowledged"].IsVisible = false
}
When I change the value of local from true to false and than back to true the column "colFirstSeen", which is last is moving to the right
The image is attached.
Thank you
Lily
When I change the value of local from true to false and than back to true the column "colFirstSeen", which is last is moving to the right
The image is attached.
Thank you
Lily
Sorry, when I save the poste it changes the fomat.
5 Answers, 1 is accepted
0
                                
                                                    Richard Slade
                                                    
                                            
    Top achievements
    
            
                 Rank 2
                Rank 2
            
    
                                                
                                                answered on 25 Feb 2011, 10:53 PM
                                            
                                        Hello Lily, 
from the information that you've provided, may i ask which AutoSizeColumnsMode you are using? I.e.
If you are using None then are you performing BestFitColumns as this will cause columns to move to allow them to resize for the content.
regards,
Richard
                                        from the information that you've provided, may i ask which AutoSizeColumnsMode you are using? I.e.
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; // or this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.None;If you are using None then are you performing BestFitColumns as this will cause columns to move to allow them to resize for the content.
regards,
Richard
0
                                
                                                    Lily
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 25 Feb 2011, 11:03 PM
                                            
                                        this
.radGridView1.MasterTemplate.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
I don't know what BestColumnFit does and if we are using it.
0
                                
                                                    Richard Slade
                                                    
                                            
    Top achievements
    
            
                 Rank 2
                Rank 2
            
    
                                                
                                                answered on 25 Feb 2011, 11:34 PM
                                            
                                        Hi Lily, 
From the information that you have provided it's not possible to draw a conclusion. If you are able to replicate this in a simple test project, then please post that here so I can review it for you and I'll be happy to help
Thanks
Richard
                                        From the information that you have provided it's not possible to draw a conclusion. If you are able to replicate this in a simple test project, then please post that here so I can review it for you and I'll be happy to help
Thanks
Richard
0
                                
                                                    Emanuel Varga
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 26 Feb 2011, 12:29 PM
                                            
                                        Hello Lily, Richard,
A few things before i offer some alternatives.
First of, i don't really like the BestFitColumns(), lately it is becoming very unstable
[Just open any grid and right click on the header and select best fit, do it again and again, and you will see that the column size keeps changing... kinnda strange considering it should be best fit, but maybe this is just me].
So, getting back to the problem at hand, the first alternative would be to just calculate the minimum size required for the column in order for it to display all the data inside that column. In this other thread i have provided some options to calculate the best possible widths of a column (or all the columns). A solution, this time for your exact case could go something like this:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Please test it and tell me if this suits your needs.
If you have any other questions i would be more than happy to assist in any way that i can.
Best Regards,
Emanuel Varga
Telerik WinForms MVP
                                        A few things before i offer some alternatives.
First of, i don't really like the BestFitColumns(), lately it is becoming very unstable
[Just open any grid and right click on the header and select best fit, do it again and again, and you will see that the column size keeps changing... kinnda strange considering it should be best fit, but maybe this is just me].
So, getting back to the problem at hand, the first alternative would be to just calculate the minimum size required for the column in order for it to display all the data inside that column. In this other thread i have provided some options to calculate the best possible widths of a column (or all the columns). A solution, this time for your exact case could go something like this:
using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;using Telerik.WinControls.UI;public partial class Form1 : Form{    private RadGridView radGridView1;    public Form1()    {        InitializeComponent();        this.Size = new System.Drawing.Size(800, 600);        InitGrid();        LoadDataSource();        var button = new RadButton();        this.Controls.Add(button);        button.Text = "Change date column visibility";        button.Dock = DockStyle.Bottom;        button.Click += new EventHandler(button_Click);    }    void button_Click(object sender, EventArgs e)    {        radGridView1.Columns["Date"].IsVisible = !radGridView1.Columns["Date"].IsVisible;        if (!radGridView1.Columns["Date"].IsVisible)        {            return;        }        var maxString = radGridView1.Rows.Select(r => r.Cells["Date"].Value != null ? r.Cells["Date"].Value.ToString() : string.Empty).Max();        double widthRequired = 0;        using (var graphics = radGridView1.CreateGraphics())        {            widthRequired = graphics.MeasureString(maxString, radGridView1.Font).Width * 1.4;        }        radGridView1.Columns["Date"].Width = Convert.ToInt32(widthRequired);    }    private void LoadDataSource()    {        var list = new List<Employee>();        for (int i = 0; i < 20; i++)        {            list.Add(new Employee { Id = i, Name = "Employee" + i, Enabled = i % 3 == 0, Date = DateTime.Now.AddHours(i) });        }        radGridView1.DataSource = list;    }    private void InitGrid()    {        this.Controls.Add(radGridView1 = new RadGridView());        radGridView1.Dock = DockStyle.Fill;        radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;    }}public class Employee{    public int Id { get; set; }    public string Name { get; set; }    public bool Enabled { get; set; }    public DateTime Date { get; set; }}If you have any other questions i would be more than happy to assist in any way that i can.
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0
                                
                                                    Emanuel Varga
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 26 Feb 2011, 12:48 PM
                                            
                                        Hello again,
Or you can use a cleaner version that uses custom properties for the column to store the old width of the column before hiding and restoring the column to that old width when making it visible again, like the following:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
I have provided two different approaches here, the first and the active one here just takes the width of the required column and restores it when making it visible again, the second approach takes the width of all the columns, and restores all of them when making that column visible.
I believe that with this info you will be able to develop a solution that best fit your specific need.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
                                        Or you can use a cleaner version that uses custom properties for the column to store the old width of the column before hiding and restoring the column to that old width when making it visible again, like the following:
using System;using System.Collections.Generic;using System.Windows.Forms;using Telerik.WinControls;using Telerik.WinControls.UI;public partial class Form1 : Form{    private RadGridView radGridView1;    public Form1()    {        InitializeComponent();        this.Size = new System.Drawing.Size(800, 600);        InitGrid();        LoadDataSource();        var button = new RadButton();        this.Controls.Add(button);        button.Text = "Change date column visibility";        button.Dock = DockStyle.Bottom;        button.Click += new EventHandler(button_Click);    }    void button_Click(object sender, EventArgs e)    {        ResizeJustDateColumn();        //ResizeAllColumns();    }    private void ResizeJustDateColumn()    {        var column = radGridView1.Columns["Date"];        if (column.IsVisible)        {            column.SetValue(CustomColumnProperty.OldWidthOfTheColumn, column.Width);        }        column.IsVisible = !column.IsVisible;        if (!column.IsVisible)        {            return;        }        column.MinWidth = (int)column.GetValue(CustomColumnProperty.OldWidthOfTheColumn);        column.Width = column.MinWidth;        Application.DoEvents();        column.MinWidth = 5;        column.MaxWidth = 0;    }    private void ResizeAllColumns()    {        var requiredColumn = radGridView1.Columns["Date"];        if (requiredColumn.IsVisible)        {            foreach (var column in radGridView1.Columns)            {                column.SetValue(CustomColumnProperty.OldWidthOfTheColumn, column.Width);            }        }        requiredColumn.IsVisible = !requiredColumn.IsVisible;        if (!requiredColumn.IsVisible)        {            return;        }        foreach (var column in radGridView1.Columns)        {            column.MinWidth = (int)column.GetValue(CustomColumnProperty.OldWidthOfTheColumn);            column.Width = column.MinWidth;            Application.DoEvents();            column.MinWidth = 5;            column.MaxWidth = 0;        }    }    private void LoadDataSource()    {        var list = new List<Employee>();        for (int i = 0; i < 20; i++)        {            list.Add(new Employee { Id = i, Name = "Employee" + i, Enabled = i % 3 == 0, Date = DateTime.Now.AddHours(i) });        }        radGridView1.DataSource = list;    }    private void InitGrid()    {        this.Controls.Add(radGridView1 = new RadGridView());        radGridView1.Dock = DockStyle.Fill;        radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;    }}public static class CustomColumnProperty{    public static readonly RadProperty OldWidthOfTheColumn =        RadProperty.Register("OldWidthOfTheColumn", typeof(int), typeof(GridViewColumn), new RadElementPropertyMetadata(0));}public class Employee{    public int Id { get; set; }    public string Name { get; set; }    public bool Enabled { get; set; }    public DateTime Date { get; set; }}I have provided two different approaches here, the first and the active one here just takes the width of the required column and restores it when making it visible again, the second approach takes the width of all the columns, and restores all of them when making that column visible.
I believe that with this info you will be able to develop a solution that best fit your specific need.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP