无法访问Gridview ItemTemplate中放置在LiteralControl内的HTML文本框

时间:2015-03-11 09:15:53

标签: c# asp.net gridview textbox literals

我有一个gridview,其中有多个列具有项目模板(从后面的代码添加)。列数将是动态的。项目模板可能包含多个条件的文本框。在我想要访问它时,在提交按钮的点击事件中,我无法访问它。

我添加模板的代码如下:

if (showBlankTextBox == true)
{

    (c as LiteralControl).ID = "ltr_" + fieldName;
    (c as LiteralControl).Text = "<label>" + targetValue + "</label>" +
    "<br /> " +
    "<input type='textbox' id='txt_" + fieldName + "' cols='10' runat='server' />";
//   "<asp:TextBox ID='txt_" + fieldName + "' runat='server'></asp:TextBox>";
}
else
{
    (c as LiteralControl).Text = "<label>" + targetValue + "</label>" +
                                    "<br/> <div> <label>" + actualValue + "</label> </div>" +
                                    "<div>" + percentResult + "</div>";
}

使用此代码后,我得到的GridView绝对是完美的

enter image description here

在上图中,红色方块区域是放在LiteralControl内的文本框,为文本框生成的HTML是<input type="textbox" id="txt_9_Q" cols="10" runat="server">(我从萤火虫检查了这个HTML)。

在提交按钮的点击事件中,我想访问文本框值,但我无法找到文本框控件。我访问文本框的代码如下:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    // getting data table from gridview
    DataTable dt = (DataTable)grdKPI.DataSource;

    string strActualValue = string.Empty;

    foreach (GridViewRow gridRow in grdKPI.Rows)
    {
        LiteralControl txtQuarter = gridRow.Cells.Cast<TableCell>().FirstOrDefault(c => c.Controls.Cast<LiteralControl>().Any(ctrl => ctrl.GetType() == typeof(LiteralControl))).Controls.Cast<LiteralControl>().FirstOrDefault(ctr => ctr.GetType() == typeof(LiteralControl));

        if (txtQuarter != null)
        {

        }
    }
}

gridview的aspx代码如下:

<asp:GridView ID="grd1" runat="server" AutoGenerateColumns="false" >
<Columns>
    <asp:BoundField DataField="Area" HeaderText="Area" />
    <asp:BoundField DataField="Purpose" HeaderText="Purpose"/>            
</Columns>
</asp:GridView>

但在txtQuarter的text属性中,我没有看到文本框。

我错过了什么?

0 个答案:

没有答案