1

私は c# および Windows フォーム アプリケーションを初めて使用します。現在、フォーム内に Datagridview を作成したいと考えており、その行にビジネス オブジェクトのプロパティを入力します。この msdn ページの例に従いました:方法: オブジェクトを Windows フォーム DataGridView コントロールにバインドし、独自のプログラムを作成しましたが、msdn の例と同様の結果が得られる代わりに、3 つの空の行を持つ datagridview が得られます。私は何を間違っていますか?これが私のプログラムです:

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());
        }
    }
}
4

3 に答える 3

1

Name1 から 6 までと呼ばれるプロパティに列をバインドしていますが、オブジェクトにはそのようなプロパティはありません。に変更NameTestます。いえ

これから:

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

これに:

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

また、@noobob によって提案されているように、

dataGridView1.DataSource = bindingSource1;

メソッドの最後まで

于 2013-02-08T14:39:01.797 に答える
1

すべての列の「DataPropertyName」プロパティは、評価されるデータ オブジェクトのプロパティの名前と一致する必要があります。したがって、次のような小さな変更を 1 つ加えると、次のようになります。

column.DataPropertyName = "Test1";

すべてが機能するはずです。

于 2013-02-08T14:41:35.607 に答える
0

column.DataPropertyName、データソース クラスで指定したプロパティ名に設定する必要があります。これを試して :

    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);
于 2013-02-08T14:44:27.477 に答える