Link to home
Start Free TrialLog in
Avatar of champ_010
champ_010

asked on

Output Text from Textbox - e.Item.FindControl

Hi, I'm trying to get the text from my textbox so I can update my DataTable but I can't even print out the text--yet there are no errors.  How do I get the textbox text?

void UpdateQty(Object Sender, DataGridCommandEventArgs e)
{
         tblCart=(DataTable)Session["dgCart"];
             
         string myText=((TextBox)e.Item.FindControl("txtQty")).Text;
         Response.Write(myText); //--------------NO TEXT PRINTS OUT!---------

         tblCart.Rows[e.Item.ItemIndex]["Quantity"]=myText;
 
         Session["dgCart"]=tblCart;

        BindData();
}
<asp:TemplateColumn HeaderText="Qty">
      <ItemTemplate>
      <asp:TextBox ID="txtQty"  Text='<%#DataBinder.Eval(Container.DataItem,"Quantity")%>' runat="server"/>
      </ItemTemplate>
</asp:TemplateColumn>
Avatar of praneetha
praneetha

when r u calling this(from where)

void UpdateQty(Object Sender, DataGridCommandEventArgs e)

void updateqty()
{
foreach(datagriditem dg in datagrid1.items) // loop theu all the rows
{
 string myText=((TextBox)e.Item.FindControl("txtQty")).Text;
 Response.write(nyText);
}
}
string myText = ((TextBox)e.Item.Cells(3).Controls(0)).Text;

try using the ordinal instead

Regards,

Aeros
Avatar of champ_010

ASKER

Hi I still get no output even when using the ordinal but I don't get errors. In fact, when I press the button for the OnUpdateCommand it just clears the textboxes so there isn't even the original number inside.

Sorry I didn't show the button:

<asp:DataGrid ID="cartGrid"
    AutoGenerateColumns="false"
    OnDeleteCommand="DeleteItem"
    OnUpdateCommand="UpdateQty"
    runat="server">

    <Columns>
       <asp:TemplateColumn HeaderText="Qty">
      <ItemTemplate>
      <asp:TextBox ID="txtQty" Text='<%#DataBinder.Eval(Container.DataItem,"Quantity")%>' runat="server"/>
      </ItemTemplate>
     </asp:TemplateColumn>

    <asp:ButtonColumn ButtonType="LinkButton"  CommandName="Update" Text="Update Qty"/>

   <asp:ButtonColumn ButtonType="LinkButton"  CommandName="Delete" Text="Remove"/>

</Columns>
</asp:DataGrid>

Just to clarify:

string myText = ((TextBox)e.Item.Cells(3).Controls(0)).Text;

e.Item.Cells(3) -- is the third column of my datagrid?
.Contorls(0) -- is the first WebControl?

(I have more columns but didn't include them in code above to keep it simple).
e.Item.Cells(3) would be the 4th column. e.Item.Cells(2) is the third - zero based.
Oopps yes, but that wasn't what was wrong...

update command

fres

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
            {
            so here you shoul dhave

this.updateqty(e);
            }

is that how u have it
ASKER CERTIFIED SOLUTION
Avatar of jnhorst
jnhorst

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial

O.k. that makes sense John.  So I'm still back at square one:

string myText=((TextBox)e.Item.Cells[3].FindControl("txtQty")).Text;
Request.Write(myText);

Still doesn't print the text, but doesn't give any errors either.

I'm trying to get whatever number the user types into the textbox as the new quantity in my shopping cart. I'm only guessing that this is how I should do it.  I can't find any good examples of this....
I think your UpdateQty routine is not wired up right.  View the web form in design view.  Show the Properties of the data grid.  At the top of the Properties window is a button with a yellow bolt on it.  Click this button to show the events for the grid.  If there is nothing in the UpdateCommand event here, you should be able to show your UpdateQty routine in a dropdown in the Property entry for the event.  You can also look for this in Windows Generated Code:

this.grdThe Grid.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.UpdateQty);

which is where the routine is wired to the event.

John

John,

I'm not using VisualStudios--just hand coding inline for now so I can learn.  You're probalby right about my update routine not being wired right.  I don't need an Edit routine to use the Update right?

Can I set something with the OnTextChanged?

I think the problem may be that when I press the button and go to the Button_Clicked method, it's already pass through the Page_Load and the tblCart in Session gets rebind to the DataGrid so the old values replace the new ones before it gets to the update.  Not sure...

(BTW, I'm going to sleep...back tommorrow am....)
You may be right about Page_Load().  Make sure you are bindind the grid like this:

If Not Page.IsPostBack Then
     theGrid.DataBind()
End If

John

What was the problem?  I had two <form> tags on the same page--but it took me this long to figure out because one of them wasn't apparent when looking at my code--it was in the user control I attached to the page for my nav bar.

Accepted John's answer--I really like your breakdown of what I am looking for--a web control within a DataGrid cell.  I need to learn to visualize things this way. Thanks.