Dynamic 获取Telerik:RadGrid中动态创建的控件的值

Dynamic 获取Telerik:RadGrid中动态创建的控件的值,dynamic,telerik,radgrid,Dynamic,Telerik,Radgrid,我有一个telerik RadGrid,点击一个按钮就可以动态添加列。代码如下: private void AddColumns() { try { DataTable dtParMaintenanceListHeaderData = (DataTable)Session["ParMaintenanceListHeaderData"]; foreach (DataColumn dc in dtParMain

我有一个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];
    }



}
单击按钮时调用上述方法

在添加的每一列中,我都添加了一个文本框,如下所示:

 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];
    }



}
#使用的区域名称空间
使用制度;
使用System.Web;
使用System.Collections.Generic;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用系统数据;
使用Telerik.Web.UI;
#端区
/// 
///RadGridTemplate的摘要说明
/// 
公共类RadGridTemplate:ITemplate
{
受保护的文字控制;
受保护的文本框文本框;
私有字符串colname;
公共RadGridTemplate(字符串cName)
{
colname=cName;
}
public void实例化EIN(System.Web.UI.Control容器)
{
textBox=新的textBox();
textBox.ID=container.ID+“txtParQty”;
textBox.Width=单位像素(50);
container.Controls.Add(文本框);
Text=HttpContext.Current.Request.Form[textBox.UniqueID];
}
}
现在还有另一个按钮“Save”,单击该按钮时,必须从动态添加的控件中的所有文本框中获取数据。问题是:

回发时,清除并重新创建所有控件,使其值为空


如何捕获一行中所有文本框的值。

如果按照telerik文档中的说明在init上实例化模板列,您应该能够在posback上保持它们的状态稳定,并从网格行中循环的文本框中获取数据。

我添加的解决方案供所有面临相同问题的其他用户使用

为了避免在radgrid中重新创建动态控件,我们必须在网格的MasterTableView中调用setEnableColumnsViewState=“false”。这对我有用

问候,

Nathiya Rajendran