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();
Другие вопросы по тегам