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

当您单击按钮时,而不是创建一个新的 MainForm,而是将您选择的对象从您的 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 回答
0

我想通了。

我在打开 UpdateForm(来自 MainForm)的按钮中使用了此代码。

                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

我最近遇到了类似的问题,我就这样解决了。

表格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 回答