如何在占位符中查找控件的索引



我有以下代码:

   Label docsLabel = new Label();
   docsLabel = (Label)tasksPlaceholder.FindControl("taskdocs_" + taskId);
   int index = tasksPlaceholder.Controls.IndexOf(docsLabel);

标签位于占位符内,但是当我调用.IndexOf() 它总是返回 -1。

如何找到此控件的正确位置?

这是您评论中的重要信息:

我要更新的元素向下 3 级(表行 -> 表单元格 ->标签)

Control.FindControl在此NamingContainer中找到所有控件,而ControlCollection.IndexOf仅查找此控件中的所有控件。因此,如果此控件包含例如包含行和单元格的表,并且每个单元格还包含控件,则IndexOf将找不到所有这些控件,仅搜索顶部控件。

Control.FindControl将搜索属于此NamingContainer的所有控件(实现 INamingContainer 的控件)。表/行/单元格没有实现它,这就是为什么所有这些控件也都使用 FindControl 搜索。

但是,FindControl不会搜索子NamingContainers(如GridViewRow中的GridView)。

这会重现您的问题:

protected void Page_Init(object sender, EventArgs e)
{
    // TableRow -> TableCell ->Label
    var table = new Table();
    var row = new TableRow();
    var cell = new TableCell();
    var label = new Label();
    label.ID = "taskdocs_1";
    cell.Controls.Add(label);
    row.Cells.Add(cell);
    table.Rows.Add(row);
    tasksPlaceholder.Controls.Add(table);
}
protected void Page_Load(object sender, EventArgs e)
{
    Label docsLabel = (Label)tasksPlaceholder.FindControl("taskdocs_1");
    int index = tasksPlaceholder.Controls.IndexOf(docsLabel); 
    // docsLabel != null and index = -1 --> quod erat demonstrandum
}

如何找到此控件的正确位置?

如果要查找此标签所属的行号:

Label docsLabel = (Label)tasksPlaceholder.FindControl("taskdocs_1");
TableRow row = (TableRow)docsLabel.Parent;
Table table = (Table)row.Parent;
int rowNumber = table.Rows.GetRowIndex(row);

相关内容

  • 没有找到相关文章

最新更新