【问题标题】:How to read dynamically added texbox's value in gridview如何在gridview中读取动态添加的texbox的值
【发布时间】:2019-10-29 01:59:36
【问题描述】:

我需要创建动态表单,我必须根据字段类型创建文本框、文本区域、下拉菜单等。

现在,我已经使用我的 rowdatabound 成功创建了这个动态文本框等。

我的问题是我无法检索单击保存按钮时输入的文本框值。

我的 aspx 文件

                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox runat="server" ID="selectProspect" Checked="true" />
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:BoundField DataField="FieldTitle" HeaderText="" />
                <asp:BoundField DataField="FieldType" HeaderText="FieldType" />
                <asp:TemplateField>
                    <ItemTemplate>
                     //DYNAMICALLY ADDING TEXTBOX

                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="RightText" HeaderText="" />
                <asp:BoundField DataField="TemplatesInfoCode" HeaderText="TemplatesInfoCode" ItemStyle-CssClass="hiddencol" />
            </Columns>
        </asp:GridView>

我的代码隐藏文件

protected void Page_Load(object sender, EventArgs e)
{
    GetTemplateComponent();

}


public void GetTemplateComponent()
{
    StringBuilder sb;
    DataSet ds;


    sb = new StringBuilder();
    sb.AppendLine("select * from template where tc='0002' order by Sequence");
    ds = Conn.DataAdapter(CommandType.Text, sb.ToString());

    gv.DataSource = ds;
    gv.DataBind();
}

protected void gv_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string value = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "FieldType"));

        if (value == "Date" || value == "TextBox")
        {


            TextBox TextBox1 = new TextBox() { ID = "TextBox1", EnableViewState = false, CssClass = "form-control" };
            e.Row.Cells[3].Controls.Add(TextBox1);
        }
        if (value == "TextArea")
        {
            TextBox DateTextBox = new TextBox() { EnableViewState = false, CssClass = "form-control", TextMode = TextBoxMode.MultiLine, Rows = 5, Columns = 50 };
            e.Row.Cells[3].Controls.Add(DateTextBox);
        }
        if (value == "Content")
        {
            TextBox ContentAreaControl = new TextBox()
            {
                TextMode = TextBoxMode.MultiLine,
                EnableViewState = false,
                Columns = 10,
                MaxLength = 150,
                Height = 200,
                CssClass = "Content-container",
            };

            e.Row.Cells[3].Controls.Add(ContentAreaControl);
        }
    }
}

protected void SaveTemplateDetails(object sender, EventArgs e)
{
    foreach (GridViewRow row in gv.Rows)
    {         
        FieldValue.Value = row.Cells[3].Text.ToString();
         *//I DONT KNOW HOW TO READ THE VALUE*
    }
}

我只是想知道阅读这个动态创建的文本框的正确方法是什么

谢谢

【问题讨论】:

    标签: c# asp.net gridview datatable textbox


    【解决方案1】:

    ASPX 页面代码。

    <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDataBound="gv_RowDataBound1">
                    <AlternatingRowStyle BackColor="White" />
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="selectProspect" Checked="true" />
                            </ItemTemplate>
                        </asp:TemplateField>
    
                        <asp:BoundField DataField="FieldTitle" HeaderText="" />
                        <asp:BoundField DataField="FieldType" HeaderText="FieldType" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="RightText" HeaderText="" />
                        <asp:BoundField DataField="TemplatesInfoCode" HeaderText="TemplatesInfoCode" />
                    </Columns>
                </asp:GridView>
    

    文件隐藏代码

       protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    string fieldType = e.Row.Cells[2].Text;
                    TextBox txtData = e.Row.Cells[3].FindControl("TextBox1") as TextBox;
                    switch (fieldType)
                    {
                        case "Date":
                        case "TextBox":
                            txtData.EnableViewState = false;
                            txtData.CssClass = "form-control";
                            break;
                        case "TextArea":
                            txtData.EnableViewState = false;
                            txtData.CssClass = "form-control";
                            txtData.TextMode = TextBoxMode.MultiLine;
                            txtData.Rows = 5;
                            txtData.Columns = 50;
                            break;
                        case "Content":
                            txtData.TextMode = TextBoxMode.MultiLine;
                            txtData.EnableViewState = false;
                            txtData.Columns = 10;
                            txtData.MaxLength = 150;
                            txtData.Height = 200;
                            txtData.CssClass = "Content-container";
                            break;
                    }
                }
            }
            protected void btnSave_Click(object sender, EventArgs e)
            {
                SaveTemplateDetails();
            }
            private void SaveTemplateDetails()
            {
                foreach (GridViewRow row in gv.Rows)
                {
                    foreach (Control c in row.Cells[3].Controls)
                    {
                        TextBox txtDate = c as TextBox;
                        if (txtDate != null)
                        {
                            string data = txtDate.Text;
                        }
                    }
                }
            }
    

    【讨论】:

    • 您好,您的回复,我试过了,还是一样,无法输入值..
    • 您好,谢谢,这是可行的,但是是否可以将 ID 设置为特定代码?因为我需要保存文本框值和一个专门为该数据生成的代码。例如: textbox value="creating new username",codeGenerated="TME0000.000223"
    猜你喜欢
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多