0

フォーム (WinForms) を介してデータベース情報を更新しようとしています。DataGridView は、Form1 にデータベース情報を表示します (Form2 (更新フォーム) を開くボタンも含まれています)。情報を更新するには、データグリッドで更新したい行を選択し、ボタンをクリックする必要があります (Form2 が開きます)。更新フォームが開くと、その中のテキスト ボックスに DataGridRows 情報が入力されます。ここで私は立ち往生しました。テキストボックスが入力されていません(エラーはありません)。私は何を間違っていますか?

私が使用しているコードは次のとおりです。

        MainForm getMainForm = new MainForm();

        private void EditMemberForm_Load(object sender, EventArgs e)
        {
            DataGridViewCell cell = null;

            foreach (DataGridViewCell selectedCell in getMainForm.MembersGridView.SelectedCells)
            {
                cell = selectedCell;
                break;
            }

            if (cell != null)
            {
                DataGridViewRow row = cell.OwningRow;

                EditFirstNameTextBox.Text = row.Cells["FirstNameColumn"].Value.ToString();
                EditLastNameTextBox.Text = row.Cells["LastNameColumn"].Value.ToString();
                EditPersonalIdTextBox.Text = row.Cells["PersonalIdColumn"].Value.ToString();
                EditCityComboBox.Text = row.Cells["CityColumn"].Value.ToString();
                EditPhoneNumberTextBox.Text = row.Cells["PhoneNumberColumn"].Value.ToString();
            }
        }
4

4 に答える 4

1
MainForm getMainForm = new MainForm();

問題は、新しいメイン フォームを作成していて、その新しく作成されたメイン フォームから選択した行を取得しようとすることです。

作成時EditMemberFormに、値をパラメーターとしてEditMemberForm

于 2013-04-10T09:44:48.633 に答える
0

最近同様の問題があり、このように解決しました。

フォーム1:

public void NotifyMe(string s, string s2, string s3, string s4, string s5)
{
    if (textBox1.InvokeRequired)
    {
        textBox1.Invoke((MethodInvoker)delegate { textBox1.Text = s; });
    }
    else
    {
        textBox1.Text = s;
    }

    //...
}

次のように Form1 から Form2 を開きます。

using (Form2 form = new Form2())
{
     // passing this in ShowDialog will set the .Owner 
     // property of the child form
     form.ShowDialog(this);
}

フォーム2:

parent = (Form1)this.Owner;
parent.NotifyMe(s, s2, s3, s4, s5);
于 2013-04-10T09:56:13.610 に答える
0

私はこれを理解しました。

(MainForm から) UpdateForm を開くボタンでこのコードを使用しました。

                EditMemberForm getEditMemberForm = new EditMemberForm();
                DataGridViewCell cell = null;                

                foreach (DataGridViewCell selectedCell in MembersGridView.SelectedCells)
                {
                    cell = selectedCell;
                    break;
                }

                if (cell != null)
                {
                    DataGridViewRow row = cell.OwningRow;

                    getEditMemberForm.EditFirstNameTextBox.Text = row.Cells["FirstNameColumn"].Value.ToString();
                    getEditMemberForm.EditLastNameTextBox.Text = row.Cells["LastNameColumn"].Value.ToString();
                    getEditMemberForm.EditPersonalIdTextBox.Text = row.Cells["PersonalIdColumn"].Value.ToString();
                    getEditMemberForm.EditCityComboBox.Text = row.Cells["CityColumn"].Value.ToString();
                    getEditMemberForm.EditPhoneNumberTextBox.Text = row.Cells["PhoneNumberColumn"].Value.ToString();
                }

                getEditMemberForm.ShowDialog();

これは完全に機能します。助けようとした人に感謝します、乾杯:)!

于 2013-04-10T09:53:46.710 に答える
0

新しい MainForm を作成する代わりに、ボタンをクリックしたときに選択したオブジェクトをメインフォームから Form2 に渡します...

例 :

private void Form2Button_Click(object sender, EventArgs e){
  Form f=new Form2(dataGridView.SelectedRow);
  f.show();
}

そして、あなたの Form2 コンストラクターで:

object myRow;

public Form2(object myRow){
  this.myRow=myRow
}
于 2013-04-10T09:47:45.267 に答える