如何将行添加到位于另一个表单上的datagridview

时间:2012-02-28 06:01:43

标签: c# datagridview add rows

我有两个表格申请。我在“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");
}

没有错误。只是沉默,行不添加。 能帮我吗?

2 个答案:

答案 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;
    }
}
祝你好运。