我有两种形式(Form1,Form2)。 Form1显示对象的值。 Form2允许用户修改Form1中值的某些属性。
旁注:(在Form1中,我以编程方式创建标签页,每个标签页中都有一个DataGridView)
我正在尝试将Form2中的新字符串值从Form1传输到DataGridView(我只能通过名称获取)。
我在Form1中创建了一个公共Tab控件,我可以访问它并搜索DataGridView。
我的代码不会产生任何错误,但DataGridView中的单元格不会像预期的那样发生变化。
我做错了什么?
//Form1
//Create public access to the TabControl on Form1
public TabControl xTabControl
{
get
{
return tabControl1;
}
}
//Form2
private void btnSubmit_Click(object sender, EventArgs e)
{
string newText = txtDescription.Text.ToString(); //New Text
string tabName = txtTabName.Text.ToString(); //Name of the Tab to reference
int txtChanged = Int32.Parse(txtChanged.Text.ToString()); //0 = No Change, 1 = Change
int jobID = Int32.Parse(hidJobID.Text.ToString()); //Job ID
int rowIndex = Int32.Parse(hidRowIndex.Text.ToString()); //The row we must reference in our DataGridView
//Call the public method from Form1 to define the Tab Control
TabControl tabControl = Form1.xTabControl;
//Define the Tab Page
TabPage tbpage = new TabPage();
tbpage = tabControl.TabPages[tabName];
//If there is a Tab Page with that name then revise the cell
if (tbpage != null)
{
//Define a DataGridView object
DataGridView dgv = new DataGridView();
//Find the DataGridView inside the TabPage (there is only 1 per Tab Page)
foreach (Control ctrl in tbpage.Controls)
{
dgv = (ctrl is DataGridView) ? (DataGridView)ctrl : dgv;
}
dgv.ReadOnly = false;
DataGridViewCell cellDescription = dgv.Rows[rowIndex].Cells[6];
DataGridViewCell cellCatName = dgv.Rows[rowIndex].Cells[7];
DataGridViewCell cellCat = dgv.Rows[rowIndex].Cells[8];
if (txtChanged > 0)
{
MessageBox.Show(cellDescription.Value.ToString()); //<-- This returns the correct string on the DataGridView
dgv.CurrentCell = cellDescription;
cellDescription.ReadOnly = false;
cellDescription.Value = newText; //<-- This should update the Cell, but it isnt!
}
else
{
}
}
}
答案 0 :(得分:1)
我不确定您当前代码无法正常工作的原因。编译器应该抱怨的第一个问题是以下行:
int txtChanged = Int32.Parse(txtChanged.Text.ToString()); //0 = No Change, 1 = Change
显然变量txtChanged
不能是string
和int
。我假设最初txtChanged
是TextBox
上Form2
的名称,其中用户键入0表示无更改,1表示更改。我只是将int
txtChanged
重命名为changeValue
,并将if语句中的此变量更改为if (changeValue > 0).
最后,我不确定您是否能够像现在一样引用父窗体选项卡控件。我将公共属性设置为获取已发布的表单选项卡控件,但它没有正确返回选项卡控件。我再次得到编译时错误,表明Form1
不包含xTabControl
的定义。
为了简化操作,不要让Tab控件成为公共变量并从Form2
访问此公共变量,只需将TabControl
传递给Form2
这将允许双向访问,要么从父选项卡控件中读取,要么写入它。
在这些更改后,您的代码似乎按预期工作。我假设名为TextBox
的{{1}}中的文字设置为第{6}行的父{4}}。
在txtDescription
中,我们想制作一个全局DataGridView
变量,指向rowIndex
传递Form2
。然后在TabControl
的构造函数中为其签名添加Form1
参数,以允许父级将其TabControl
传递给Form2
。如下所示:
TabControl
希望这有帮助。