将字符串从datagridview传递到另一种形式的文本框

时间:2012-12-20 14:38:08

标签: c# winforms

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

使用TextBox

形成一个
 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 个答案:

答案 0 :(得分: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中获取此值,但正如我所说,我不确定我们是否在考虑同样的事情...... < / p>

答案 1 :(得分:1)

如果您的Form2中只需要字符串SupplierID 然后在Form2

中创建supplierID的变量
private String supplierID;

独立于此数据的目的,为此变量创建属性

然后为Form2

创建一个新的自定义构造函数
public void Form2(String supplierid)
{
    this.supplierID = supplierid;
}
在Form1中创建Form2的实例时,只需使用自定义构造函数

//somwhere in Form1
Form2 frm2 = New Form2(SelectedSupllierID)
frm2.ShowDialog() //…

答案 2 :(得分: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。为什么要使用空值更新SupplierID。当您创建ListOfSuppliers的新对象时,该类中的SupplierCode为空,您将为您的SupplierID分配一个空值。

另外我看不到变量_ListOfSuppliers ???

的目的

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