Найдите элемент управления внутри строки сетки

я использую родительскую дочернюю сетку, а в дочерней сетке я делаю Show/hide throw java script. и дочерняя сетка, я связываю время выполнения с шаблонными столбцами, например

GridView NewDg = new GridView();
NewDg.ID = "dgdStoreWiseMenuStock";

TemplateField TOTAL = new TemplateField();
TOTAL.HeaderTemplate = new BusinessLogic.GridViewTemplateTextBox(ListItemType.Header, "TOTAL",e.Row.RowIndex );
TOTAL.HeaderStyle.Width = Unit.Percentage(5.00);
TOTAL.ItemTemplate = new BusinessLogic.GridViewTemplateTextBox(ListItemType.Item, "TOTAL", e.Row.RowIndex);
NewDg.Columns.Add(TOTAL);

NewDg.DataSource = ds;
NewDg.DataBind();


NewDg.Columns[1].Visible = false;
NewDg.Columns[2].Visible = false;

System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
NewDg.RenderControl(htw);

Теперь у меня есть одно текстовое поле внутри сетки с именем «ВСЕГО». Я хочу найти это текстовое поле и хочу получить его значение.

Как это получить?


person user239146    schedule 27.12.2009    source источник


Ответы (4)


Вы можете получить элемент управления TextBox внутри соответствующей ячейки GridView, используя свойство Controls или метод FindControl(string id):

TextBox txtTotal = gv.Rows[index].cells[0].Controls[0] as TextBox;

or

TextBox txtTotal = gv.Rows[index].cells[0].Controls[0].FindControl("TOTAL") as TextBox;

где index может быть 0 для первой строки или итератор внутри цикла for.

В качестве альтернативы вы можете использовать цикл foreach для строк GridView:

foreach(GridViewRow row in gv.Rows)
{
    TextBox txtTotal = row.cells[0].Controls[0].FindControl("TOTAL") as TextBox;
    string value = txtTotal.Text;

    // Do something with the textBox's value
}

Кроме того, вы должны иметь в виду, что если вы создаете GridView динамически (а не декларативно в веб-форме), вы не сможете получить этот элемент управления после обратной передачи страницы.

На эту тему есть отличная статья 4 парня из Роллы: Dynamic Веб-элементы управления, обратные передачи и состояние просмотра

person alejofv    schedule 29.12.2009

Как вы знаете, вы можете получить значение TextBox, например, для первой строки и первой ячейки:

((TextBox) dgdStoreWiseMenuStock.Rows[0].Cells[0].Controls[1]).Text; 

или измените индекс управления, поставив 0, если указанная выше строка не работает.

person Florim Maxhuni    schedule 27.12.2009

Попробуй это

 TextBox txtTotal = (TextBox)gv.Rows[index].cells[0].FindControl("TOTAL");
 string value = txtTotal.Text;
person Kushagra Bansal    schedule 04.10.2012

Самый простой способ найти элемент управления внутри gridview — использовать цикл foreach для поиска строк.

 foreach (GridViewRow row in Gridname.Rows)
 {
      TextBox txttotal = (TextBox)row.FindControl("textboxid_inside_grid");
      string var = txttotal.Text;

      Response.Write("Textbox value = " + var);
 }
person Manali    schedule 04.09.2018