用DataGridView信息填充文本框

本文关键字:文本 填充 信息 DataGridView | 更新日期: 2023-09-27 18:08:29

我试图通过表单更新数据库信息(在WinForms)。DataGridView在Form1中显示数据库信息(其中还包含一个打开Form2(更新表单)的按钮)。要更新信息,我必须在数据网格中选择要更新的行,然后单击按钮(打开Form2)。当Update Form打开时,其中的文本框应该填充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();
            }
        }

用DataGridView信息填充文本框

MainForm getMainForm = new MainForm();

问题是您正在创建新的主表单,并尝试从新创建的主表单中获得选定行。

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

不是创建一个新的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
}

我明白了。

我在打开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();

这工作完美。谢谢那些试图帮助我的人,干杯:)!

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

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

Form2:

parent = (Form1)this.Owner;
parent.NotifyMe(s, s2, s3, s4, s5);