使用DataGridView信息填充文本框

时间:2013-04-10 09:36:44

标签: c# winforms

我正在尝试通过Form(在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 个答案:

答案 0 :(得分:1)

MainForm getMainForm = new MainForm();

问题是您正在创建新的主窗体并尝试从新创建的主窗体中获取选定的行。

创建EditMemberForm时,您可以将值作为参数传递给EditMemberForm

答案 1 :(得分: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
}

答案 2 :(得分: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();

这完美无缺。感谢任何试图帮助的人,欢呼:)!

答案 3 :(得分:0)

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

Form1中:

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);