1

最初に私はこのリンクを見たと言うべきです:

子フォームを閉じるときにdatagridviewを更新するにはどうすればよいですか?

そして私はこれが好きでした:(私はForm1にdatagridviewを持っています) Form1:

                public void FillDataGridView(DataTable dt1)
            {
                    bindingSource1.DataSource = dt1;
                    bindingSource1.ResetBindings(false);
                    dataGridView1.DataSource = bindingSource1;
                    //here i checked number of rows of dt1 and it shows the correct value
            }

Form2:

           SqlConnection cnn = new SqlConnection(@"My connection string");
            private Form1 Handled_frm1;
            public Form2(Form1 frm1)
            {
                    InitializeComponent();

                Handled_frm1 = frm1;
            }

               private void textbox1_TextChanged(object sender, EventArgs e)
                     {
                        dt.Clear();
                        using (SqlCommand cmd =cnn.CreateCommand())
                        {
                            if (cnn.State == ConnectionState.Closed)
                            {
                                cnn.Open();
                            }
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Connection = cnn;
                            cmd.CommandText = "spSearchCustomerByName";
                            SqlParameter inparam1 = cmd.Parameters.AddWithValue("@name", textbox1.Text);
                            inparam1.Direction = ParameterDirection.Input;
                            dap.SelectCommand = cmd;
                            dap.Fill(dt);

                            Handled_frm1.FillDataGridView(dt);
                        }

しかし、Datagridviewの価値は変わりません!

編集:

データグリッドビューをクリアできるかどうかをテストしたかったので、FillDataGridViewを次のように変更しました。

                public void FillDataGridView(DataTable dt1)
            {
                    dt.Clear();
                    dataGridView1.Columns.Clear();
                    dataGridView1.DataSource = null;
                    dataGridView1.Refresh();
            }

ただし、datagridview1はクリアされません!!!

4

2 に答える 2

2

Form1の誤ったインスタンスを誤って使用しました!!

form1には、クリックするとform2.iがクリックイベントでこのコードを記述したことを示すボタンがあります。

Form1 frm1=new Form1();
Form2 frm2=new Form2(frm1);

Form1のインスタンスを追加したため、これは正しくありませんでした。

そして、私はこのようにコードを変更します:

Form2 frm2=new Form2(this);
于 2012-06-04T23:15:53.413 に答える
1

次のリンクで説明されているように、BindingSourceを使用してみてください。

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.datasource

DataSourceを直接設定しても、DataGridViewが再バインドされることはないと思いますが、BindingSourceがそれを処理します。

于 2012-06-04T20:39:00.307 に答える