Получение значений динамически созданного элемента управления внутри Telerik: RadGrid - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть Telerik RadGrid, к которому я динамически добавляю столбцы по нажатию кнопки.Код выглядит следующим образом:

 private void AddColumns()
    {
        try
        {
            DataTable dtParMaintenanceListHeaderData = (DataTable)Session["ParMaintenanceListHeaderData"];
            foreach (DataColumn dc in dtParMaintenanceListHeaderData.Columns)
            {
                dc.ReadOnly = false;
            }
            if (!dtParMaintenanceListHeaderData.Columns.Contains("parComboDataField"))
                dtParMaintenanceListHeaderData.Columns.Add("parComboDataField", typeof(string));
            dtParMaintenanceListHeaderData.AcceptChanges();
            foreach (DataRow drEachRow in dtParMaintenanceListHeaderData.Rows)
            {
                string cusCombo = drEachRow["cusfstnam"].ToString() + " - " + drEachRow["cuslstnam"].ToString();
                string parCombo = drEachRow["parcod"].ToString() + " - " + drEachRow["pardsc"].ToString();
                drEachRow["parComboDataField"] = cusCombo + " " + parCombo;
                GridTemplateColumn templateColumn = new GridTemplateColumn();
                string templateColumnName = cusCombo + " - " + parCombo;
                templateColumn.ItemTemplate = new RadGridTemplate(templateColumnName);
                templateColumn.HeaderText = templateColumnName;
                templateColumn.DataField = "parqty";
                templateColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                templateColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                templateColumn.HeaderStyle.Width = Unit.Pixel(60);
                templateColumn.HeaderStyle.Wrap = true;

                this.radgridParListItems.MasterTableView.Columns.Add(templateColumn);


            }
        }
        catch (Exception Ex)
        {


        }
    }

Вышеуказанный метод вызывается по нажатию кнопки.

В каждом из добавленных столбцов я добавляю текстовое поле следующим образом:

#region Namespaces used
using System;
using System.Web;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Telerik.Web.UI;
#endregion

/// <summary>
/// Summary description for RadGridTemplate
/// </summary>
public class RadGridTemplate : ITemplate
{
    protected LiteralControl lControl;
    protected TextBox textBox;
    private string colname;
    public RadGridTemplate(string cName)
    {
        colname = cName;
    }
    public void InstantiateIn(System.Web.UI.Control container)
    {

        textBox = new TextBox();
        textBox.ID = container.ID + "txtParQty";
        textBox.Width = Unit.Pixel(50);
        container.Controls.Add(textBox);
         textBox.Text = HttpContext.Current.Request.Form[textBox.UniqueID];
    }



}

Теперь есть еще одна кнопка «Сохранить», при нажатии на которую нужно будет получать данные со всехтекстовые поля в динамически добавленных элементах управления.Проблема заключается в том, что:

При отправке назад все элементы управления очищаются и воссоздаются, поэтому их значения равны нулю.

Как получить значения всех текстовых полей в строке.*

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Если вы создадите экземпляры столбцов шаблона в init, как описано в telerik docs здесь , вы сможете сохранять их состояние устойчивым на обратных передачах и извлекать данные из текстовых полей, проходящих через строки сетки.1003 *

0 голосов
/ 02 октября 2013

Я добавляю решение для использования другими пользователями, которые сталкиваются с той же проблемой.

Чтобы избежать воссоздания динамических элементов управления в Radgrid, мы должны вызвать набор EnableColumnsViewState = " false " в MasterTableView сетки У меня это сработало.

С уважением,

Натия Раджендран.

...