1

我在 TabControl1 中有一个 TabControl2。TabControl2 在 TabControl1 的所有 TabPages 中。在 TabControl2 的 TabPage 中是 DataGridView,我需要使用这个 DataGridView(Add.Rows 等)。全部以编程方式添加。

我正在寻找找到正确 DataGridView 的最佳方法,所以我需要类似的东西:

DataGridView xxx = TabControl2.SelectedTab.Controls.Find("data_grid_view_name", false).FirstOrDefault() as DataGridView ***in TabControl1.SelectedTab***
Find this DataGridView by more :

Foreach (var y in TabControl1.Controls.OfType<Tabpage>())
{
//looks like a dirty code for me
}
4

3 回答 3

1

此 Linq 查询返回DataGridView嵌套中的第一个TabControls

var gridViews = from tp in this.tabControl1.TabPages.Cast<TabPage>()
                from tc in tp.Controls.OfType<TabControl>()
                from tp2 in tc.TabPages.Cast<TabPage>()
                from grid in tp2.Controls.OfType<DataGridView>()
                select grid;
DataGridView firstGrid = gridViews.FirstOrDefault();
// if(firstGrid != null) ...
于 2013-06-11T14:23:13.900 回答
0

另一个例子:

string dgvName = "data_grid_view_name";
if (tabControl1.SelectedTab != null)
{
    var nestedTabControl = (from TC in tabControl1.SelectedTab.Controls.OfType<TabControl>() select TC).FirstOrDefault();
    if (nestedTabControl != null && nestedTabControl.SelectedTab != null)
    {
        Control[] matches = nestedTabControl.SelectedTab.Controls.Find(dgvName, true);
        if (matches.Length > 0 && matches[0] is DataGridView)
        {
            DataGridView dgv = (DataGridView)matches[0];
            // ... do something with "dgv" ...
        }
    }
}
于 2013-06-11T15:34:15.873 回答
0

我认为最直接的方法是:

tabControl1.Controls.Find("data_grid_view_name", true);
于 2013-06-11T14:05:29.910 回答