简体   繁体   中英

Get cell values of textBoxes within ItemTemplate of a Gridview

I have a GridView with textBoxes inside ItemTemplates. I can retrieve the data from the column that was binded to the Gridview on page load, however, I do not see any of the manually entered text when reading the cell values.

The 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>

The code behind:

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

The solution I found - within the foreach loop for each textbox:

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

There may be a less clunky way of doing this but it does work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM