C# использовать datatable в другой форме
Привет, я искал много тем, также здесь, в stackru, однако ни один не решил мою проблему
Это моя основная форма, где я работаю со своей базой данных и отображаю элементы в datagridview
public partial class Form1 : Form
{
DatabaseConnection objConnect;
string conString;
private static DataTable table;
DataSet dataSet;
public Form1()
{
InitializeComponent();
CreateConnection();
MakeDataTable();
}
public DataTable table
{
get
{
return table;
}
}
private void MakeDataTable()
{
table = new DataTable();
DataColumn column;
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "Name of Item";
table.Columns.Add(column);
etc...
}
//this connects to my local db through DatabaseConnection.cs
//where I got table ItemsInWorld,
//from where I take items and add it via InputBox to my datatable table
//which works fine and shows all added items
private void CreateConnection()
{
objConnect = new DatabaseConnection();
conString = Properties.Settings.Default.ItemsConnectionString;
objConnect.connection_string = conString;
objConnect.Sql = Properties.Settings.Default.SQL;
dataSet = objConnect.GetConnection;
}
//I also have here code that show content of this DataTable table in
//DataGridView Form1.dataGridView
}
Допустим, я бы нажал кнопку в Form1, затем Form2 появится с другим dataGridView
В этой форме, как я уже сказал, я хотел бы иметь другой dataGridView, позволяющий называть его просто dataGridV, который будет отображать те же элементы, что и dataGridView в Form1, что мне делать?
Это мой код, но он показывает только пустую таблицу
Form2 : form
{
DataTable table2;
DatabaseConnection objConnect;
string conString;
DataSet dataSet;
public DataGridV()
{
InitializeComponent();
CreateConnection();
CreateDataView();
}
private void CreateConnection()
{
objConnect = new DatabaseConnection();
conString = Properties.Settings.Default.ItemsConnectionString;
objConnect.connection_string = conString;
objConnect.Sql = Properties.Settings.Default.SQL;
dataSet = objConnect.GetConnection;
}
public void CreateDataView()
{
Form1 f = new Form1();
table2 = f.TableBackpack;
dataGridViewMix.DataSource = new DataView(tableBackpack);
}
}
1 ответ
Если Form1
отвечает за открытие экземпляра Form2
, затем Form1
следует сохранить этот экземпляр в приватном поле:
private Form2 form2 = new Form2();
Затем создайте публичный метод в Form2
что позволит Form1
установить поле таблицы (вместо Form2
пытаясь вытащить это из Form1
как в вашем примере кода).
public void SetTable(DataTable table)
{
table2 = table;
// Your code to fill DGV source with table2
}
Использование в Form1
может выглядеть примерно так:
form2.SetTable(this.table);
form2.ShowDialog();