2

我已经设置了 2 个表单,其中一个加载了一个 datagridview,用户单击视图以选择他们想要的值。我可以在与 datagridview 相同的表单上的消息框中获取显示的值但是,当我尝试将其传递给另一个表单时,它显示为 NULL。我如何让它在文本框中显示。这是我的代码。当我调试代码时,它首先正确地传递值,但是当它完成运行时,它显示为空值。我已经尝试了许多不同的方法来尝试在不同的类上使用公共变量来做到这一点。

带有文本框的表格一

 public void FillTextBoxes(object sender, EventArgs e, string SupplierID)
    {
        supplierVO _SupplierVo = new supplierVO();
        ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
        SupplierID = _ListOfSuppliers.SupplierCode;                                   
        MessageBox.Show(SupplierID);
        txtSupplierCode.Text = SupplierID;         
    }

带有 dataGridView 的 Form2

       // Links to the user double click of the datagrid
    public void SelectGridInformation (object sender, EventArgs e)
    {   
        ChangeSupplierInfo _ChangeSupplerInfo = new ChangeSupplierInfo();

        supplierVO _SupplierVO = new supplierVO();

        Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

        string SelectedSupplierID = dataGridView1.SelectedCells[0].Value.ToString();

        SupplierCode = SelectedSupplierID;

        _SupplierVO.SupplierCode = SelectedSupplierID;

        _ChangeSupplerInfo.FillTextBoxes(sender, e, SelectedSupplierID);

        this.Close();
    }

我一直在尝试使用 Get 和 Set 属性来做到这一点,这里是代码示例。

 public string SupplierCode
    {
        get
        {
            return _SupplierCode;
        }
        set
        {
            _SupplierCode = value;
        }
    }
4

4 回答 4

2

我不确定我们是否在考虑同样的事情,但看看这个。你有 Form1 在哪里是 DataGridView 和 Form2 在哪里是你的 TextBox。

所以让我们在 Form1 中创建 Form2 ...

Form2 form2 = new Form2();
form2.show();

...并获取 DataGridView 的选定单元格

form2.value = getDataGridValue();

然后,让我们在 Form2 中声明属性,我们将向其传递用户选择的值。

private string _value;

public string value
{
    get { return _value; }
    set
    {
      _value = value;
      OnPropertyChanged(_value);
    }
}

请注意,我们正在使用 INotifyPropertyChanged,因此请将此声明包含在 Form2 中

public partial class Form2 : Form, INotifyPropertyChanged

创建公共事件

public event PropertyChangedEventHandler PropertyChanged;

并在我们的用户单击 DataGridView 中的某些内容的任何地方提起它

protected void OnPropertyChanged(string value)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(value));
        }
    }

然后在 Form2Load 上订阅您的新活动

private void Form2_Load(object sender, EventArgs e)
{
   PropertyChanged += new PropertyChangedEventHandler(Form2_PropertyChanged);
}

做这些事情

void Form2_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
   this.InvokeIfRequired((value) => textBox1.Text = value, e.PropertyName);
}

对我来说它工作正常,我在 Form1 上的 DataGridView 中选择值并在 Form2 上的 TextBox 中获取这个值,但正如我所说,我不确定我们是否在考虑同样的事情......

于 2012-12-20T17:08:35.903 回答
1

如果您在 Form2 中只需要字符串 SupplierID,则在 Form2 中创建一个供应商 ID 变量

private String supplierID;

独立于该数据的目的为该变量创建一个属性

然后为 Form2 创建一个新的自定义构造函数

public void Form2(String supplierid)
{
    this.supplierID = supplierid;
}

在 Form1 中,当您创建 Form2 的实例时,只需使用您的自定义构造函数

//somwhere in Form1
Form2 frm2 = New Form2(SelectedSupllierID)
frm2.ShowDialog() //…
于 2012-12-21T13:37:07.917 回答
0

此代码中的以下行是您的问题。

public void FillTextBoxes(object sender, EventArgs e, string SupplierID)
{
    supplierVO _SupplierVo = new supplierVO();
    ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
    SupplierID = _ListOfSuppliers.SupplierCode;   //This line is the problem.                                
    MessageBox.Show(SupplierID);
    txtSupplierCode.Text = SupplierID;         
}

您正在从方法的参数中获取 SupplierID。你为什么用空值更新供应商ID。当您创建 ListOfSuppliers 的新对象时,该类中的 SupplierCode 为空,并且您正在为您的 SupplierID 分配一个空值。

我也看不到变量_ListOfSuppliers 的用途???

于 2012-12-20T15:01:40.690 回答
0

由于某种原因,您无法通过string创建表单来传递New Instance

试试这个..在您Form1尝试通过此代码显示 Form2 时。

 using (var f = new Form2
                        {
                            Owner = this
                        }) f.ShowDialog();

那么在Form2事件中,它应该是这样的

    Form1 f0 = this.Owner as Form1; //_ChangeSupplerInfo 

    supplierVO _SupplierVO = new supplierVO();

    Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

    string SelectedSupplierID = dataGridView1.SelectedCells[0].Value.ToString();

    //SupplierCode = SelectedSupplierID;

    //_SupplierVO.SupplierCode = SelectedSupplierID;

    f0.FillTextBoxes(SelectedSupplierID);

    this.Close();

并从Form1

 public void FillTextBoxes(string SupplierID)
    {
        supplierVO _SupplierVo = new supplierVO();
        ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
        //SupplierID = _ListOfSuppliers.SupplierCode;                                   
        MessageBox.Show(SupplierID);
        txtSupplierCode.Text = SupplierID;         
    }
于 2012-12-20T16:24:01.013 回答