我已经设置了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;
}
}
答案 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;
}