获取 Gridview 的 ItemTemplate 中文本框的单元格值

Get cell values of textBoxes within ItemTemplate of a Gridview

我在 ItemTemplates 中有一个带有文本框的 GridView。我可以在页面加载时从绑定到 Gridview 的列中检索数据,但是,在读取单元格值时我没有看到任何手动输入的文本。

HTML:

<asp:GridView ID="tblRentDue" runat="server" ClientIDMode="Static">
<Columns>
    <asp:BoundField DataField="Application_ID" HeaderText="Application ID" HeaderStyle-Wrap="false" />
    <asp:BoundField DataField="Month" HeaderText="Month" HeaderStyle-Wrap="false" />
    <asp:TemplateField HeaderText="Orignal Amount Due">
        <ItemTemplate>
            <asp:TextBox ID="txtOrignalAmountDue" runat="server" TextMode="Number" Text='<%# Eval("Original_Amount_Due") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Fees Due">
        <ItemTemplate>
            <asp:TextBox ID="txtFeesDue" runat="server" TextMode="Number" Text='<%# Eval("Fees_Due") %>' />

        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Amount Paid">
        <ItemTemplate>
            <asp:TextBox ID="txtAmountPaid" runat="server" TextMode="Number" Text='<%# Eval("Amount_Paid") %>' />

        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Total Still Due">
        <ItemTemplate>
            <asp:TextBox ID="txtTotalStillDue" runat="server" TextMode="Number" Text='<%# Eval("Total_Still_Due") %>' />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

背后的代码:

public DataTable GetDataTable(GridView dtg)
{
    DataTable dt = new DataTable();

    dt.Columns.Add("Month");
    dt.Columns.Add("Original_Amount_Due");
    dt.Columns.Add("Fees_Due");
    dt.Columns.Add("Amount_Paid");
    dt.Columns.Add("Total_Still_Due");

    foreach (GridViewRow row in dtg.Rows)
    {
        DataRow dr;
        dr = dt.NewRow();

        dr["Month"] = (row.Cells[0].Text); //These values are showing up and was loaded from the database.
        dr["Original_Amount_Due"] = (row.Cells[1].Text); //Nothing showing from user input
        dr["Fees_Due"] = (row.Cells[2].Text); //Nothing showing from user input
        dr["Amount_Paid"] = (row.Cells[3].Text); //Nothing showing from user input
        dr["Total_Still_Due"] = (row.Cells[4].Text); //Nothing showing from user input

        dt.Rows.Add(dr);
    }
    return dt;
}

我找到的解决方案 - 在每个文本框的 foreach 循环中:

TextBox orignalAmount = (TextBox)row.Cells[1].FindControl("txtOrignalAmountDue");
dr["Original_Amount_Due"] = orignalAmount.Text;

可能有一种不那么笨拙的方法,但它确实有效。