我有一个Invoice form
,其中包含几个私有TextBox。我想将某些值从search form
中的DataGridView传递到Invoice form
中的那些TextBox(例如,当我按Enter时)。
我想做的是将DataGridView中当前选定行的值传递给Invoice Form
中的某些TextBoxes:
我可以用以下代码说明这一点:
(我知道如何在datagridview中获取所选行的值,我的问题只是标题...)
if (e.KeyCode == Keys.Enter)
{
SqlCommand sqlcmd = new SqlCommand("SELECT ID FROM X WHERE ID=" +
dataGridView1.CurrentRow.Cells[0].Value + "", sqlcon);
SqlDataReader sqldr = sqlcmd.ExecuteReader();
while (sqldr.Read())
{
InvoiceForm.CodeTextBox = sqldr[codecolumn].Tostring
InvoiceForm.NameTextBox = sqldr[Namecolumn].Tostring
InvoiceForm.BlahTextBox = sqldr[Blahcolumn].Tostring
}
}
这向我抛出以下错误:
codeTextBox是私有的...由于受到保护,因此无法这样做 级别...
我认为我必须制作一个公共静态类,但我不知道如何做。 我如何尝试:
private string RetrivedCode;
private string RetrivedName;
private int RetrivedQTY;
...
Public Form1(string CodeTextBox , string NameTextBox, string BlahTextBox)
{
this.CodeTextBox= RetrivedCode;
this.NameTextBox= RetrivedName;
... and so On
}
哪个错误:
无法将类型'string'隐式转换为 “ system.windows.forms.textbox”。
答案 0 :(得分:0)
好吧,错误很明显,您正在尝试convert type 'string' to 'system.windows.forms.textbox'.
while (sqldr.Read())
{
//textbox string
InvoiceForm.CodeTextBox = sqldr[codecolumn].Tostring();
InvoiceForm.NameTextBox = sqldr[Namecolumn].Tostring();
InvoiceForm.BlahTextBox = sqldr[Blahcolumn].Tostring();
}
如果您改为在文本框中设置text
属性,则错误会消失。
while (sqldr.Read())
{
// Note the ´Text´ property.
InvoiceForm.CodeTextBox.Text = sqldr[codecolumn].Tostring();
InvoiceForm.NameTextBox.Text = sqldr[Namecolumn].Tostring();
InvoiceForm.BlahTextBox.Text = sqldr[Blahcolumn].Tostring();
}
更新:
实际上是同一件事,即使第二部分是引发错误的部分。我假设CodeTextBox
是一个文本框?
this.CodeTextBox.Text = RetrivedCode;
this.NameTextBox.Text = RetrivedName;
但是您问的是错误的问题。因为您不必“为此创建一个公共静态类”。如果您将文本框设置为受保护的(如果您的第二个表单继承了第一个表单)或将其设为私有而不是私有,则可以按照我的第一个示例直接分配值。
如果您的文本框必须是私有的,请使用公共或受保护的访问器或设置文本框的Text属性值的公共方法。
答案 1 :(得分:0)
您是否尝试过在 InvoiceForm (称为 InvoiceForm.Designer.cs 文件)中将CodeTextBox
的访问级别更改为公开。