我在一个Form中有一个DataGrid1,在另一个Form2中有一个第二个。现在我想将我在一个GridView中选择的行传递给第二个。
public String selectRows(object sender)
{
string val = String.Empty;
foreach (DataGridViewColumn column in form1.dataGridView1.Columns)
{
dataGridView2.Columns.Add(column.Clone() as DataGridViewColumn);
}
foreach (DataGridViewRow row in form1.dataGridView1.SelectedRows)
{
int index = dataGridView2.Rows.Add(row.Clone() as DataGridViewRow);
foreach (DataGridViewCell cell in row.Cells)
{
dataGridView2.Rows[index].Cells[cell.ColumnIndex].Value = cell.Value;
}
}
return val;
}
这适用于两个GridView都在同一个表单中(并且代码更改了一点而没有"发送者"," val"等等)。现在,我试图在两种形式之间建立沟通。在这种情况下,我得到一个" NullReferenceException"上
dataGridView2.Columns.Add(column.Clone() as DataGridViewColumn);
我还在Form1中创建了一个函数:
public Object getDataGrid()
{
return dataGridView1.DataSource;
}
并尝试设置" Object gridData = form1.getDataGrid();" 当我现在尝试写" gridData.Coulumns"他不会接受" Columns"。我该怎么办或功能无效?
答案 0 :(得分:0)
假设您在DataTable
中拥有Form2
的媒体资源
如果您想要在DataTable
开启时将整个Form2
移至Form2
,请填写以下内容:
Form2 f2= new Form2();
//f2.DataTableProp= yourDataTable;
f2.ShowDialog();
请参阅注释行。
或者您可以按照以下步骤操作:
1-将属性添加到Form2
,如下所示:
public List<DataGridViewRow> Rows
{
get;
set;
}
2- Form1
当你想要这样的节目Form2
时:
private void btnShowForm2_Click(object sender, EventArgs e)
{
List<DataGridViewRow> selectedRows = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
selectedRows.Add(row);
}
Form2 oForm = new Form2(this);
oForm.Rows = selectedRows;
oForm.Show();
}
3-最后,您可以在Rows
中操纵Form2
,如:
private void Form2_Shown(object sender, EventArgs e)
{
foreach (DataGridViewRow row in Rows)
{
//Manipulate row
}
}
以上步骤经过测试并正常运行。
但根据你的问题和你的代码,我看到你想要访问Form1
GridView的选定行,所以根据我所知,win表单上的附加控件是私有的
因此,您可以将GridView1
的访问类型更改为Public,如:
public System.Windows.Forms.DataGridView dataGridView1;
然后您可以将Form1
作为Form2
的父级传递给它的构造函数,如下所示:
1-更改Form2
的构造函数,如:
public Form2(Form1 parent)
{
InitializeComponent();
//You can access gridView1 here
//For example
MessageBox.Show(parent.dataGridView1.Rows.Count.ToString());
}
2-当您打开Form2
passe Form1
作为其父母时:
Form2 f2 = new Form2(this);
f2.Show();
或者:
public Form1 ParentForm
{
get;
set;
}
public Form2(Form1 parent)
{
InitializeComponent();
ParentForm = parent;
selectRows();
}
public void selectRows()
{
foreach (DataGridViewColumn column in ParentForm.dataGridView1.Columns)
{
//Your code
}
foreach (DataGridViewRow row in ParentForm.dataGridView1.SelectedRows)
{
//Your code
}
}