[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 483
  • Last Modified:

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>
0
champ_010
Asked:
champ_010
  • 6
  • 3
  • 2
  • +2
1 Solution
 
praneethaCommented:
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);
}
}
0
 
AerosSagaCommented:
string myText = ((TextBox)e.Item.Cells(3).Controls(0)).Text;

try using the ordinal instead

Regards,

Aeros
0
 
champ_010Author Commented:
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>
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
champ_010Author Commented:

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).
0
 
tomasX2Commented:
e.Item.Cells(3) would be the 4th column. e.Item.Cells(2) is the third - zero based.
0
 
champ_010Author Commented:
Oopps yes, but that wasn't what was wrong...

0
 
praneethaCommented:
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
0
 
jnhorstCommented:
Think in terms of what HTML the various web controls send to the browser.  A datagrid, for example, will send a <table> with rows and cells.  In your ItemTemplate, you are showing the data in a textbox.  So in HTML, there will be a <td> tag that corrsponds to the column, inside each <tr>  tag that corresponds to a row.  If you put a label in your ItemTemplate, that label will render as a <span> tag inside the <td></td> tag.  So when you do e.Item.Cells(3).Controls(...) you are referring to whatever controls are embedded in the column.  In your case, since you have named your textbox, you would be better off using e.Item.Cells(3).FindControl("txtQty"), which you cast to a TextBox class and get the text.

John
0
 
champ_010Author Commented:

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....
0
 
jnhorstCommented:
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

0
 
champ_010Author Commented:
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....)
0
 
jnhorstCommented:
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
0
 
champ_010Author Commented:

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.
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 6
  • 3
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now