我对c#.net相对较新。如果您想要更多输入来回答我的问题,请告诉我。
1)我想做什么?
我使用的表单在3个不同的标签中有近30个数据网格视图控件。 datagridview的名称如下。
dgView1
,dgView2
,dgView3
除了上面的数据网格控件,我也有很少的文本框控件,所以在选项卡1中更具体..我得到了控制项目。
txtTabName1
,txtStrKey1
,dgView1
现在我正在尝试编写一个函数,它将输入一个输入参数int v_CtrlNum
并且使用此参数我需要从一个选项卡中扫描每个项目并将其添加到ArrayList / Collection。
所以例如函数将需要从datagrid视图中读取每一行,如下所示
for datagrid
foreach (DataGridViewRow in dgView+v_CtrlNum )
for textbox
txtTabName+v_CtrlNum
我想知道我是否采取了正确的方向。
答案 0 :(得分:2)
您可以查看Controls.Find Method,请注意它会返回匹配的控件数组。
Control[] tbp = tabControl1.Controls.Find("txtTabName" + 2,true );
if (tbp.Length > 0)
{
Control[] dv = tbp[0].Controls.Find("dgView" + 2, true);
}
答案 1 :(得分:0)
我不完全确定我正在追踪你想要实现的目标,但我认为你只想通过身份证号码来控制,对吧? 你可以这样做:
List<Controls> myTabControls = new List<Controls>();
foreach (Control thisControl in this.Controls)
if (thisControl.Name.Contains(v_CtrlNum.ToString()))
foreach (Control thisChildControl in thisControl.Controls)
myTabControl.Add(thisChildControl)thisChildControl
要获取与v_CtrlNum
对应的选项卡中的控件,假设v_CtrlNum
是控件名称的一部分的标识符。然后通过选项卡中的控件来处理每个DataGridView,可能是这样的:
foreach (Control thisControl in myTabContols)
if (thisControl.GetType() == typeof(DataGridView))
// Parse your DataGridView's rows here
this.Controls
是表单的控件集合(this
在这种情况下引用您的父表单。)
这有帮助吗?但我不确定我是否正确地理解了你在问题中提出的要求......
答案 2 :(得分:0)
我认为您可能想要做的是这样的事情:
DataGridView[] formDataGrids = this.Controls.OfType<DataGridView>().ToArray();
这将为您提供表单中所有DataGridView的数组。您可以使用该选项卡的控件列表为单个选项卡执行此操作。您可以对文本框执行相同的操作,只需使用TextBox替换OfType()调用中的数组类型和类型。
您不能像示例中那样使用foreach,因为“in”的右侧必须是对特定List或Array的引用(实现IEnumerable的内容)。但是如果您创建了上面的列表,那么您可以执行以下操作:
foreach(DataGridView thisGrid in formDataGrids)
DoSomething(thisGrid);
或者将它们链接在一起,如:
foreach(DataGridView thisGrid in this.Controls.OfType<DataGridView>())
DoSomething(thisGrid);
对于多标签处理,您应该已经在设计器中为每个页面创建了TabPage成员。然后你可以做类似的事情:
var formDataGrids = new List<DataGridView>();
if (usingTab1)
formDataGrids.AddRange(tabPage1.Controls.OfType<DataGridView>());
if (usingTab2)
formDataGrids.AddRange(tabPage2.Controls.OfType<DataGridView>());
if (usingTab3)
formDataGrids.AddRange(tabPage3.Controls.OfType<DataGridView>());
foreach(var thisGrid in formDataGrids)
DoSomething(thisGrid);