0

I have a problem that is most likely easy but I'm missing something small.

I have looked at numerous entries on Stack Overflow with the same question but I must be doing something wrong.

I am trying to get the value of a textbox in a GridView after typing into it. I want to take that value and update a SQL field.

Here is my GridView:

<asp:GridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="SALESID" HeaderStyle-HorizontalAlign="CENTER" HorizontalAlign="CENTER" CellPadding="4" ForeColor="#333333" GridLines="Both" AllowSorting="true" AllowPaging="true" PageSize="100" OnRowDataBound="ASPxGridView1_RowDataBound" OnSorting="ASPxGridView1_Sorting" OnRowUpdating="ASPxGridView1_RowUpdating">
                    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                    <Columns>
                        <%-- 0  This is e.Row.Cells[0].Text --%>
                        <asp:BoundField DataField="SALESID" HeaderText="SALES ORDER" SortExpression="SALESID" HeaderStyle-CssClass="padLeft" HeaderStyle-Width="125" ItemStyle-Width="115">
                            <HeaderStyle HorizontalAlign="Center"  />
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                           
                        <%-- 1 --%>
                        <asp:BoundField DataField="ITEMID" HeaderText="PART NUMBER" HeaderStyle-HorizontalAlign="Center" SortExpression="ITEMID" ItemStyle-Width="150" >
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                           
                        <%-- 2 --%>
                        <asp:BoundField DataField="NAME" HeaderText="PART NAME"  HeaderStyle-HorizontalAlign="Center" SortExpression="NAME" ItemStyle-Width="320">
                            <HeaderStyle HorizontalAlign="Center" />
                        <ItemStyle HorizontalAlign="Left" />
                        </asp:BoundField>
                            
                        <%-- 3 --%>
                        <asp:BoundField DataField="CUSTACCOUNT" HeaderText="ACC" HeaderStyle-HorizontalAlign="Center" SortExpression="CUSTACCOUNT">
                        <ItemStyle HorizontalAlign="Left" />
                        </asp:BoundField>
                            
                        <%-- 4 --%>
                        <asp:BoundField DataField="SALESNAME" HeaderText="CUSTOMER"  HeaderStyle-HorizontalAlign="Center" SortExpression="SALESNAME" ItemStyle-Width="350" >
                        <ItemStyle HorizontalAlign="Left" />
                        </asp:BoundField>
                           
                        <%-- 5 --%>
                        <asp:BoundField DataField="SHIPPINGDATECONFIRMED" HeaderText="SHIPPING DATE"  HeaderStyle-HorizontalAlign="Center" SortExpression="SHIPPINGDATECONFIRMED" ItemStyle-Width="100" >
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                            
                        <%-- 6 --%>
                        <asp:BoundField DataField="QTYORDERED" HeaderText="QTY ORDERED"  HeaderStyle-HorizontalAlign="Center" SortExpression="QTYORDERED" >
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                            
                        <%-- 7 --%>
                        <asp:BoundField DataField="REMAINSALESPHYSICAL" HeaderText="QUANTITY REMAINED"  HeaderStyle-HorizontalAlign="Center" SortExpression="REMAINSALESPHYSICAL" >
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>

                        <%-- 8 --%>
                        <asp:BoundField DataField="AVAILPHYSICAL" HeaderText="AVAIL PHYSICAL"  HeaderStyle-HorizontalAlign="Center" SortExpression="AVAILPHYSICAL" ItemStyle-Width="80" >
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                            
                        <%-- 9 --%>
                        <asp:HyperLinkField DataTextField="WMSLOCATIONID" HeaderText="LOCATION"  HeaderStyle-HorizontalAlign="Center" DataNavigateURLFields="ITEMID" DataNavigateURLFormatString="~\Location.aspx?ITEMID={0}" Target="_blank" SortExpression="WMSLOCATIONID">
                        <ItemStyle HorizontalAlign="Center" />
                        </asp:HyperLinkField>

                        <%-- 10 --%>
                        <asp:HyperLinkField DataTextField="INPROCESS" HeaderText="IN PROCESS"  HeaderStyle-HorizontalAlign="Center" DataNavigateUrlFields="ITEMID" DataNavigateUrlFormatString="~\InProcess.aspx?ITEMID={0}" Target="_blank" SortExpression="INPROCESS">
                        <ItemStyle HorizontalAlign="Left" /> 
                        </asp:HyperLinkField>

                        <%-- 11 --%>
                        <asp:BoundField DataField="PRD" HeaderText="PRD" HeaderStyle-HorizontalAlign="Center" SortExpression="PRD" ItemStyle-Width="135">
                            <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                       
                         <%-- 12 --%>
                        <asp:TemplateField HeaderText="SHIPTODAY" ItemStyle-Width="90">
                            <ItemTemplate>
                                <asp:TextBox ID="SHIPTODAY" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>

                        <%-- 13 --%>
                        <asp:TemplateField HeaderText="NOTES" >
                            <ItemTemplate>
                                <asp:TextBox ID="NOTES" runat="server" TextMode="MultiLine"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField> 
                        
                        <asp:ButtonField ButtonType="Button" HeaderText="" CommandName="Update" Text="Update" />
                          
                        
                    </Columns>
                    <EditRowStyle BackColor="#999999" />
                    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#284775" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" />
                    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="False" ForeColor="#333333" />
                    <SortedAscendingCellStyle BackColor="#E9E7E2" />
                    <SortedAscendingHeaderStyle BackColor="#506C8C" />
                    <SortedDescendingCellStyle BackColor="#FFFDF8" />
                    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                </asp:GridView>

Here is my gridview _RowUpdating method:

  protected void ASPxGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

            Debug.WriteLine("row updating");
            int index = Convert.ToInt32(e.RowIndex);
            Debug.WriteLine("Index: " + index);
            GridViewRow selectedRow = ASPxGridView1.Rows[index];
            TableCell itemIDSelected = selectedRow.Cells[1];
            TableCell rowPRD = selectedRow.Cells[11];
            TableCell rowShipToday = selectedRow.Cells[12];
            TableCell rowNotes = selectedRow.Cells[13];
            string itemIdSelectedText = itemIDSelected.Text;
            string rowPRDSelected = rowPRD.Text;
            string rowShipTodaySelected = rowShipToday.Text;
            string test = ((TextBox)selectedRow.FindControl("NOTES")).Text;
            string test1 = ((TextBox)ASPxGridView1.Rows[index].FindControl("NOTES")).Text;
            TextBox test2 = ASPxGridView1.Rows[index].FindControl("NOTES") as TextBox;
            string test2text = test2.Text;
            //string rowNotesSelected = rowNotes.Text;
            //Debug.WriteLine(itemIdSelectedText);
            //Debug.WriteLine(itemIdSelectedText);
            //Debug.WriteLine(rowPRDSelected);
            //Debug.WriteLine(rowShipTodaySelected);
            Debug.WriteLine(test1);
            Debug.WriteLine(test);
            Debug.WriteLine(test2text);
            //Debug.WriteLine(selectedRow.Cells[0].Text);
            //Debug.WriteLine(selectedRow.Cells[1].Text);
            //Debug.WriteLine(selectedRow.Cells[2].Text);
            //Debug.WriteLine(selectedRow.Cells[3].Text);
            //Debug.WriteLine(selectedRow.Cells[4].Text);
            //Debug.WriteLine(selectedRow.Cells[5].Text);
            //Debug.WriteLine(selectedRow.Cells[6].Text);
            //Debug.WriteLine(selectedRow.Cells[7].Text);
            //Debug.WriteLine(selectedRow.Cells[8].Text);
            //Debug.WriteLine(selectedRow.Cells[9].Text);
            //Debug.WriteLine(selectedRow.Cells[10].Text);
            Debug.WriteLine(selectedRow.Cells[11].Text);
            //Debug.WriteLine(selectedRow.Cells[12].Text);
            //Debug.WriteLine(selectedRow.Cells[13].Text);
            Debug.WriteLine("-----------");
            //Debug.WriteLine(rowShipTodaySelected);
            //Debug.WriteLine(rowNotesSelected);
        }

When I run this and I type something in, the debug writeline's show.

I know i'm on the correct line because the index is correct per the line I am clicking the Update button on.

Sample debug output from above looks like this:

row updating
Index: 5
D31948P01
PRD-00030521




PRD-00030521

I cannot seem to get the value of the NOTES TextBox field. As you can see with my testing I've tried using a FindControl and I've tried having it as a TextBox and also trying to get it directly to a string.

I've set breakpoints and each time I do it the test variable is null. I'm missing something and I do not know what.

To summarize: On non-text fields I can pull the data from the field. On TextBox fields I cannot even using the FindControl method.

What I want to do: Get the TextBox field value in the GridView so I can update the database.

StackOverflow links I've tried before asking this question:
c# Get value (text) of a bound textbox in a gridview
How to get value of TextBox of GridView in C#?
Manipulate textbox on gridview C#
Get TextBox value from GridView cell
ASP.net C# Gridview ButtonField onclick event

Thanks in advance. I've spent over 6 hours of attempting this without results. I don't understand it well enough yet. If there are any tutorials or videos explaining GridView's please let me know what they are so I can understand better.

1 Answer 1

0

The reason why RowUpdating method cannot find the text inside the textbox is most likely because of the postback. Clicking update button causes a post back to server. Before ASPxGridView1_RowUpdating is called, there is an a call to re-build the gridview ie.: ASPxGridView1.DataBind(). To avoid this, wrap the databind in an if (!Page.IsPostBack)

Below is a basic working example

<asp:GridView ID="ASPxGridView1" 
            runat="server" 
            AutoGenerateColumns="False" 
            OnRowUpdating="ASPxGridView1_RowUpdating">
            <Columns>         
                <asp:TemplateField HeaderText="NOTES" >
                    <ItemTemplate>
                        <asp:TextBox ID="NOTES" runat="server" TextMode="MultiLine"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>                         
                <asp:ButtonField ButtonType="Button" HeaderText="" CommandName="Update" Text="Update" />                                                  
            </Columns>
        </asp:GridView>

Code behind:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // This code will not be reached if you click update button.
        var data = new string[] { "a", "b", "c" };
        ASPxGridView1.DataSource = data;
        ASPxGridView1.DataBind();
    }
}

protected void ASPxGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    int index = Convert.ToInt32(e.RowIndex);
           
    GridViewRow selectedRow = ASPxGridView1.Rows[index];            
    TextBox txtNotes = (TextBox)selectedRow.FindControl("NOTES");
    Debug.WriteLine(txtNotes.Text);
}
Sign up to request clarification or add additional context in comments.

1 Comment

Greg, thank you very much. That was the issue! Thanks a ton.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.