Как найти все элементы управления в Gridview? - PullRequest
0 голосов
/ 11 мая 2011

У меня есть gridview, который содержит элементы управления, такие как checkbox dropdownlist textbox и т. Д. Эти элементы управления находятся в TemplateField, а некоторые в updatepanel в gridview. Существует EditTemplateField, который имеет некоторые элементы управления и button. Когда сетка находится в режиме редактирования, теперь я должен найти все элементы управления в этом EditTemplateField в button click event. Я знаю, что это можно сделать с помощью цикла foreach, но не знаю как?

Ответы [ 4 ]

4 голосов
/ 11 мая 2011

Вы можете использовать сетку EditIndex, чтобы найти строку, содержащую элементы управления, которые находятся в режиме редактирования. Оттуда вы можете получить элемент управления, используя идентификатор элемента управления.

TextBox txtItem = (TextBox)Grid1.Rows[Grid1.EditIndex].FindControl("txtItem");

Чтобы найти все элементы управления, попробуйте следующее:

foreach(Control c in Grid1.Rows[Grid1.EditIndex].Controls)
{
    // do stuff in here.

}

Если у вас есть элементы управления контейнером в ряду, и вам нужно что-то найти внутри них, вам нужно сделать что-то, чтобы вернуться в их элементы управления.

Я не понимаю, почему вам нужно было бы зацикливать элементы управления, обычно элементы управления в шаблоне редактирования будут фиксированными, и вы знаете, к чему они обращаются, так что прямой доступ к ним через Findcontrol - это путь.

2 голосов
/ 11 мая 2011

Если вы имеете в виду в коде, вы можете сделать это так:

foreach ( GridViewRow row in MyGridView.Rows )
{
    TextBox myTextBox = (TextBox)row.FindControl("myTextBox");
}
1 голос
/ 11 мая 2011

Вот отличный полезный метод.Он рекурсивный, поэтому он найдет вложенные элементы, например,

var listOfControls = Utility.FindControlsOfType<TextBox>(yourGridRow);

Если вы не знаете точный тип вложенных элементов управления, используйте FindControlsOfType .

public static class Utility
{    
    public static List<T> FindControlsOfType<T>(Control ctlRoot)
    {
        List<T> controlsFound = new List<T>();

        if (typeof(T).IsInstanceOfType(ctlRoot))
            controlsFound.Add((T)(object)ctlRoot);

        foreach (Control ctlTemp in ctlRoot.Controls)
        {
            controlsFound.AddRange(FindControlsOfType<T>(ctlTemp));
        }

        return controlsFound;
    }
}
0 голосов
/ 11 мая 2011

Возьмите сгенерированный html, используя Firebug и используя http://jsfiddle.net, вы можете включить jquery и поиграть с html.

Добавьте обработчик события к кнопке редактирования, например

Например

function edit(this)
{
   var textboxID = $(this).parent().find("[id$='textBoxId']");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...