Everything in my project is mostly dynamic and I am having a little issue when trying to create multiple datagridviews dynamically
Currently with my setup I am getting a NullReferenceError on this line dgv.DataSource = ds.Tables[index.ToString()];
Ive tried several different approaches but to my knowledge I cant seem to find anything wrong with my code this should be working perfectly
all the relevant code is below
//Create a new window
private void NewWindow() {
            TabPage tb = new TabPage();
            DataGridView dgv = new DataGridView();
            DataTable dt = new DataTable();
            tb.Text = "New..";
            dgv.Dock = DockStyle.Fill;
            tb.Controls.Add(dgv);
            tabControl1.TabPages.Add(tb);
}
//bind
DataGridView dgv = tabControl1.SelectedTab.Controls.OfType<DataGridView>() as DataGridView;
dgv.DataSource = ds.Tables[index.ToString()];
EDIT: Here all all the relevant functions and variables
DataSet ds = new DataSet();
        string path = "";
        bool _exiting = false;
        private void openToolStripMenuItem_Click(object sender, EventArgs e) {
            Browse();
        }
private void NewWindow() {
            TabPage tb = new TabPage();
            DataGridView dgv = new DataGridView();
            DataTable dt = new DataTable();
            tb.Text = "New..";
            dgv.Dock = DockStyle.Fill;
            tb.Controls.Add(dgv);
            tabControl1.TabPages.Add(tb);
        }
        private void OnColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
            int index = tabControl1.SelectedIndex;
            EditHeader eh = new EditHeader(this.UpdateHeader);
            eh.TextBox1.Text = ds.Tables[index.ToString()].Columns[e.ColumnIndex].ToString();
            eh.TextBox2.Text = e.ColumnIndex.ToString();
            eh.Show();
        }
        private void UpdateHeader(string indexVal) {
            string[] array = indexVal.Split(',');
            int index = int.Parse(array[0]);
            ds.Tables[index.ToString()].Columns[index].ColumnName = array[1];
            DisableSortMode();
        }
        private void OpenCSVFile() {
            using (TextFieldParser csvParser = new TextFieldParser(path)) {
                csvParser.TextFieldType = FieldType.Delimited;
                csvParser.SetDelimiters(",");
                int index = tabControl1.SelectedIndex;
                bool firstLine = true;
                while (!csvParser.EndOfData) {
                    //proccessing
                    string[] fields = csvParser.ReadFields();
                    if (firstLine) {
                        foreach (var val in fields) {
                            ds.Tables[index.ToString()].Columns.Add(val);
                        }
                        firstLine = false;
                        continue;
                    }
                    //get row data
                    ds.Tables[index.ToString()].Rows.Add(fields);
                }
                //bind
                DataGridView dgv = tabPage1.Controls.OfType<DataGridView>() as DataGridView;
                dgv.DataSource = ds.Tables[index.ToString()];
            }
        }
        private void Browse() {
            OpenFileDialog csvSearch = new OpenFileDialog();
            csvSearch.Filter = "csv files (*.csv)|*.csv";
            csvSearch.FilterIndex = 1;
            csvSearch.Multiselect = false;
            if (csvSearch.ShowDialog() == DialogResult.OK) {
                int index = tabControl1.SelectedIndex;
                DataTable dt = ds.Tables.Add(index.ToString());
                path = csvSearch.FileName;
                tabPage1.Text = csvSearch.FileName;
                OpenCSVFile();
                DisableSortMode();
            }
        }
 
    