Click here to Skip to main content
15,906,816 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm facing one problem regarding datagridview row hiding in my project. The code I've pasted works in saperate test project but, not in my project. Please help me on this.

The code i'm testing
C#
public partial class frmTestGirdBinding : Form
{
    CustomDataCollection cdata = new CustomDataCollection();
    Random rnd = new Random();
    public frmTestGirdBinding()
    {
        InitializeComponent();
    }

    private void frmTestGirdBinding_Load(object sender, EventArgs e)
    {
        BindingSource bindingSource1 = new BindingSource();
        bindingSource1.DataSource = cdata;
        dataGridView1.DataSource = bindingSource1;
        //bindingSource1.Filter = "Srno = 3"; not working


        CurrencyManager cm = (CurrencyManager)BindingContext[bindingSource1.DataSource];
        cm.SuspendBinding();
        //InVisible the rows
        dataGridView1.Rows[2].Visible = false;
        dataGridView1.Rows[3].Visible = false;
        cm.ResumeBinding();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < cdata.Count; i++)
        {
            cdata[i].Reading = (float)rnd.NextDouble();
        }
        dataGridView1.Refresh(); //without this all rows are not updating
    }
}

class CustomDataCollection : BindingList<CustomData>
{
    public CustomDataCollection()
    {
        this.Add(new CustomData() { SrNo = 1, Name = "A", Reading = 11.11F });
        this.Add(new CustomData() { SrNo = 2, Name = "B", Reading = 22.11F });
        this.Add(new CustomData() { SrNo = 3, Name = "C", Reading = 33.11F });
        this.Add(new CustomData() { SrNo = 4, Name = "D", Reading = 44.11F });
        this.Add(new CustomData() { SrNo = 5, Name = "E", Reading = 55.11F });
        this.Add(new CustomData() { SrNo = 6, Name = "F", Reading = 66.11F });
        this.Add(new CustomData() { SrNo = 7, Name = "G", Reading = 77.11F });
    }
}
class CustomData : INotifyPropertyChanged
{
    int srno;

    public int SrNo
    {
        get { return srno; }
        set { srno = value; OnPropertyChanged("SrNo"); }
    }

    string name;

    public string Name
    {
        get { return name; }
        set { name = value; OnPropertyChanged("Name"); }
    }

    float reading;

    public float Reading
    {
        get { return reading; }
        set { reading = value; OnPropertyChanged("Reading"); }
    }
    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion

}


Please help me in this.
Posted
Comments
Ankur Ramanuj 18-Nov-13 4:38am    
try it in databound....

protected void GridView1_DataBound(object sender, EventArgs e)
{
if (GridView1.Rows.Count == 1)
GridView1.Rows[0].Visible = false;
}
mangesh.raykar 18-Nov-13 23:21pm    
Thanks for your reply. DataBindingComplete event solves my problem.

1 solution

Searching on this issue solve the problem by adding DataBindingComplete event and hide the specific row. DataBindingComplete is fired 2 times, 1 at the time of binding and 2nd after form_load event complete.

C#
public partial class frmTestGirdBinding : Form
{
    CustomDataCollection cdata = new CustomDataCollection();
    Random rnd = new Random();
    public frmTestGirdBinding()
    {
        InitializeComponent();
        this.dataGridView1.DataBindingComplete += new System.Windows.Forms.DataGridViewBindingCompleteEventHandler(this.dataGridView1_DataBindingComplete);
    }

    private void frmTestGirdBinding_Load(object sender, EventArgs e)
    {
        BindingSource bindingSource1 = new BindingSource();
        bindingSource1.DataSource = cdata;
        dataGridView1.DataSource = bindingSource1;            

    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < cdata.Count; i++)
        {
            cdata[i].Reading = (float)rnd.NextDouble();
        }
        dataGridView1.Refresh(); //without this all rows are not updating
    }

    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        //InVisible the rows
        dataGridView1.Rows[2].Visible = false;
        dataGridView1.Rows[3].Visible = false;
    }
}

class CustomDataCollection : BindingList<customdata>
{
    public CustomDataCollection()
    {
        this.Add(new CustomData() { SrNo = 1, Name = "A", Reading = 11.11F });
        this.Add(new CustomData() { SrNo = 2, Name = "B", Reading = 22.11F });
        this.Add(new CustomData() { SrNo = 3, Name = "C", Reading = 33.11F });
        this.Add(new CustomData() { SrNo = 4, Name = "D", Reading = 44.11F });
        this.Add(new CustomData() { SrNo = 5, Name = "E", Reading = 55.11F });
        this.Add(new CustomData() { SrNo = 6, Name = "F", Reading = 66.11F });
        this.Add(new CustomData() { SrNo = 7, Name = "G", Reading = 77.11F });
    }
}
class CustomData : INotifyPropertyChanged
{
    int srno;

    public int SrNo
    {
        get { return srno; }
        set { srno = value; OnPropertyChanged("SrNo"); }
    }

    string name;

    public string Name
    {
        get { return name; }
        set { name = value; OnPropertyChanged("Name"); }
    }

    float reading;

    public float Reading
    {
        get { return reading; }
        set { reading = value; OnPropertyChanged("Reading"); }
    }
    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion

}</customdata>
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900