我有两个表格申请。我在“MainForm”上有三个字符串列的datagrid。 第二种形式的目的地是向这个数据网格添加行,其中包含一些参数,例如1,2和3列的文本
此代码有效
private void MainForm_Load(object sender, EventArgs e)
{
dgvTasks.Rows.Add("s1", "s2", "s3");
}
但是当我将此代码放到另一个表单时,它不起作用
//"MainForm"
public void addRowToDataGridView(string type, string title, string time)
{
dgvTasks.Rows.Add(type, title, time);
}
//"ParametersForm"
public static MainForm fm = new MainForm();
private void btnSave_Click(object sender, EventArgs e)
{
fm.addRowToDataGridView("s1", "s2", "s3");
}
没有错误。只是沉默,行不添加。 能帮我吗?
答案 0 :(得分:2)
MainForm fm = new MainForm();
这样,您在为MainForm创建实例对象时创建了另一个MainForm。
你应该获得活跃的主要方式。所以你应该持有活跃的MainForm实例。
//"MainForm"
public static MainForm MainFormRef { get; private set; }
public Form1()
{
InitializeComponent();
MainFormRef = this;
}
public void addRowToDataGridView(string type, string title, string time)
{
dgvTasks.Rows.Add(type, title, time);
}
//"ParametersForm"
private void btnSave_Click(object sender, EventArgs e)
{
var fm = MainForm.MainFormRef;
fm.addRowToDataGridView("s1", "s2", "s3");
}
答案 1 :(得分:0)
据我了解你的问题,我可以建议你这样的答案
在MainForm中创建任何类型的属性'setter' (例如:
//here is your MainForm
{
public List<MyGVContent> SetColumnHead
{
set
{
//here call your method to whom give 'value' as parameter
//attention, that in value contains items with Type, Title, Time
addRowToDataGridView();
}
}
//which will update your 'dgvTasks' gridview
)
//here is your Parameters Form
{
private void btnSave_Click(object sender, EventArgs e)
{
//here call the property to whom send parameters
this.MainForm.SetColumnHead = ...
}
}
//where
public sealed class MyGVContent
{
string Type
{
get; set;
}
string Title
{
get; set;
}
string Time
{
get; set;
}
}
祝你好运。