2

我正在开发一个 Windows 窗体应用程序。我的窗口窗体中有两个 tab2。在每个选项卡中,我构建了一个我将其命名为 dgvRound 的 datagridview。我将两组不同的数据加载到这两个选项卡中的两个 datagridview 中。当我从 tab1 切换到 tab2 时,我仍然看到 tab1 上的 datagridview 数据。如何更改它(货币?)以查看 tab2 中的 dgvRound,我用新数据更新 datagridview?

// tabView is my main tab page control
//  Add a new tab for a new round
string title = "Round " + Convert.ToString(intRound);
TabPage myTabPage = new TabPage(title);
tabView.TabPages.Add(myTabPage);

// set up datagridview box
DataGridView dgvRound = new DataGridView();
myTabPage.Controls.Add(dgvRound);
// set up the datagridview column and row headings
SetupTableView(dgvRound);

//load datagridview in a loop with different data from different dataset
string[] row1 = new string[] { "array of datas" };
dgvRound.Rows.Add(row1);

我根据一些变量调用了上面的代码多次创建选项卡和 dgv。每个选项卡中每个数据网格中的数据都可以。但是,当我尝试从 tab2 中提取 datagridview (dgvRound) 中的数据时,我看到的是 tab1 中的数据而不是 tab2。例如:dgvRound.Rows[0].Cells["Game 1"].Value。我如何告诉它查看 tab2.dgvRound.Rows[0].Cells["Game 1"].Value?

感谢您的帮助丹尼尔

感谢HotSoft,我终于找到了在动态创建的标签页中搜索当前datagridview的代码。我添加了这个,它现在正在工作。TabPage CurrentTabPage = tabView.SelectedTab; // 在这里获取所有控件 Control.ControlCollection col = CurrentTabPage.Controls; // 应该只有一个 dgv foreach (Control myControl in col) { if (myControl.ToString() == "System.Windows.Forms.DataGridView") { DataGridView tempdgv = (DataGridView)myControl; tempdgv.SelectAll(); dgvRound = tempdgv;} } 再次感谢你的帮助...

4

2 回答 2

2

鉴于我看不到您在每个选项卡上动态创建 DataGridView 的代码

看起来您在两个选项卡上都显示了相同的 DataGrid,而没有重新加载或重新绑定不同选项卡上数据网格的不同数据源

更新 OP 的评论:

您可以像这样从标签页中获取 DataGridView

DataGridView dataGridView1 = tabPage1.Controls.OfType<DataGridView>() as DataGridView;
DataGridView dataGridView2 = tabPage2.Controls.OfType<DataGridView>() as DataGridView;
于 2012-07-17T19:05:04.963 回答
1

为什么不为每个 tabPage 创建两个不同的 DataGridView?或者,如果您只想在两个选项卡上使用 1 个 dgv,则将其清除(将数据源设置为 null)并为下一个选项卡设置新数据源。

于 2012-07-17T19:04:59.290 回答