2

I`m new to c# and windows form applications. Right now, I want to create a Datagridview within my form, whose rows I want to fill with the properties of a business object. I followed the example from this msdn page: How to: Bind Objects to Windows Forms DataGridView Controls and created my own program, but instead of getting a similar result as in the msdn example I get a datagridview with three empty rows. What am I doing wrong? Here is my program:

using System;
using System.Windows.Forms;


public class Form3 : Form
{
    private DataGridView dataGridView1 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();

    public Form3()
    {            
        this.Load += new System.EventHandler(EnumsAndComboBox_Load);
    }

    private void EnumsAndComboBox_Load(object sender, System.EventArgs e)
    {
        // Populate the data source.           
        bindingSource1.Add(new Test("bli", "bla", "blop", "ha", "ho", "he"));
        bindingSource1.Add(new Test("bli", "bla", "blop", "ha", "ho", "he"));

        // Initialize the DataGridView.
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.AutoSize = true;
        dataGridView1.DataSource = bindingSource1;

        // Initialize and add a text box column.
        DataGridViewColumn column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name1";
        column.Name = "Name1";
        dataGridView1.Columns.Add(column);

        // Initialize and add a check box column.
        column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name2";
        column.Name = "Name2";
        dataGridView1.Columns.Add(column);

        column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name3";
        column.Name = "Name3";
        dataGridView1.Columns.Add(column);

        column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name4";
        column.Name = "Name4";
        dataGridView1.Columns.Add(column);

        column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name5";
        column.Name = "Name5";
        dataGridView1.Columns.Add(column);

        column = new DataGridViewTextBoxColumn();
        column.DataPropertyName = "Name6";
        column.Name = "Name6";
        dataGridView1.Columns.Add(column);

        // Initialize the form.
        this.Controls.Add(dataGridView1);
        this.AutoSize = true;
        this.Text = "DataGridView object binding demo";
    }

    #region "test object"
    private class Test
    {
        private string test1;
        private string test2;
        private string test3;
        private string test4;
        private string test5;
        private string test6;

        public Test(string s1, string s2, string s3, string s4, string s5, string s6)
        {
            test1 = s1;
            test2 = s2;
            test3 = s3;
            test4 = s4;
            test5 = s5;
            test6 = s6;
        }

        public Test()
        {
            test1 = "bla";
            test2 = "bla";
            test3 = "bla";
            test4 = "bla";
            test5 = "bla";
            test6 = "bla";
        }


        public string Test1
        {
            get
            {
                return test1;
            }
            set
            {
                test1 = value;
            }
        }

        public string Test2
        {
            get
            {
                return test2;
            }
            set
            {
                test2 = value;
            }
        }

        public string Test3
        {
            get
            {
                return test3;
            }
            set
            {
                test3 = value;
            }
        }

        public string Test4
        {
            get
            {
                return test4;
            }
            set
            {
                test4 = value;
            }
        }

        public string Test5
        {
            get
            {
                return test5;
            }
            set
            {
                test5 = value;
            }
        }

        public string Test6
        {
            get
            {
                return test6;
            }
            set
            {
                test6 = value;
            }
        }
    }

    #endregion

    static class Program
    {
        [STAThread]
        public static void Main()
        {
            Application.Run(new Form3());
        }
    }
}
1
  • 1
    Florian, after this line dataGridView1.DataSource = bindingSource1; check to see if dataGridView1.DataBind() method is available.. Commented Feb 8, 2013 at 14:35

3 Answers 3

2

You are binding columns to properties called Name from 1 to 6 but in your object there is no such properties. Change Name to Test. Ie

from this:

column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "Name6";
column.Name = "Name6";
dataGridView1.Columns.Add(column);

to this:

column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "Test6";
column.Name = "Name6";
dataGridView1.Columns.Add(column);

also as suggested by @noobob move your

dataGridView1.DataSource = bindingSource1;

to the end of method

Sign up to request clarification or add additional context in comments.

1 Comment

Changing column.DataPropertyName = "NameX"; to column.DataPropertyName = "TestX"; solved the prob. Thanks
2

"DataPropertyName" property of every column must match the name of a property of the data object being evaluated. So if you just make one tiny change like this:

column.DataPropertyName = "Test1";

everything should work.

1 Comment

Changing column.DataPropertyName = "NameX"; to column.DataPropertyName = "TestX"; solved the prob.
0

The column.DataPropertyName should be set to the property names you specified in the datasource class. Try This :

    column = new DataGridViewTextBoxColumn();
    column.DataPropertyName = "Test1";
    column.Name = "Test1";
    dataGridView1.Columns.Add(column);

    column = new DataGridViewTextBoxColumn();
    column.DataPropertyName = "Test2";
    column.Name = "Test2";
    dataGridView1.Columns.Add(column);

    column = new DataGridViewTextBoxColumn();
    column.DataPropertyName = "Test3";
    column.Name = "Test3";
    dataGridView1.Columns.Add(column);

2 Comments

Changing column.DataPropertyName = "NameX"; to column.DataPropertyName = "TestX"; solved the prob.
@FlorianHeld I'm glad it helped. You could mark any of the answers given as accepted and/or Upvote them.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.