private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.Page.IsPostBack)
{
buss.buss buss = new web_bootnr.buss.buss();
ds = new DataSet();
ds = buss.Info(Convert.ToInt32(Request["index"]));
DataGrid1.DataSource =ds.Tables[0];
DataGrid1.DataKeyField = "id";
DataGrid1.DataBind();
}
}绑定代码
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{

if(e.CommandName=="Add")
{
TextBox tb = new TextBox();
tb = (TextBox)DataGrid1.Items[e.Item.ItemIndex].Cells[5].FindControl("TextBox1");
Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);
}

}
为什么ItemCommand取不到TextBox的值,请高手们看看!谢谢

解决方案 »

  1.   

    这个需要你用一个foreach  把datagrid里面的文本框都取出来  在通过ID 判断
      

  2.   

    Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);这句不对吧
    Response.Redirect("ship-bag.aspx?num="+tb.text+"&val="+tb.Text);
      

  3.   

    不是Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);对不对的问题,tb.text根本没有值,我也知道我前面那句写错了
      

  4.   

    if(e.CommandName=="Add")
    {
    TextBox tb = new TextBox();
    tb = (TextBox)DataGrid1.Items[e.Item.ItemIndex].Cells[5].FindControl("TextBox1");
    Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);
    }
    ---------------
    你只是想把textbox1.text的值通过num传出去,是吗?
    如果是,那么你new 一个tb出来有什么用呢?直接:
    Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).text+"");
      

  5.   

    if(e.CommandName=="Add")
    {
    TextBox tb = (TextBox)e.Item.Cells[5].FindControl("TextBox1");
    Response.Redirect(...);
    }
      

  6.   

    if(e.CommandName=="Add")
    {
    TextBox tb = new TextBox();
    tb = (TextBox)DataGrid1.Items[e.Item.ItemIndex].Cells[5].FindControl("TextBox1");
    Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);
    }
    --------------------是不是你的这句:DataGrid1.Items[e.Item.ItemIndex].Cells[5].FindControl("TextBox1");
    我觉得应该写成:tb = (TextBox)e.Item.FindControl("TextBox1");
      

  7.   

    测了很多遍就是取不到值,各种方法都试了,就是取不出,而且用button根本不执行ItemCommand,用linkbutton取的就是初始值
      

  8.   

    你的ItemCommand注册的事件是否丢失了贴贴你的代码看看
      

  9.   

    <asp:datagrid id="DataGrid1" runat="server" BackColor="White" BorderColor="DarkGray" HorizontalAlign="Center"
    CssClass="title1" AutoGenerateColumns="False" Width="846px">
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BackColor="LightGray"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="Image merchandise">
    <ItemTemplate>
    <P align="center">
    <asp:Image id="Image1" runat="server" Width="100px" Height="80px" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"img1")%>'>
    </asp:Image>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Product Name">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="id" runat="server" Visible="False">
    <%# DataBinder.Eval(Container.DataItem,"id") %>
    </asp:Label><A href='introduce.aspx?product=<%#DataBinder.Eval(Container.DataItem,"Trade_Name")%>'><%#DataBinder.Eval(Container.DataItem,"Trade_Name")%></A></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Size ">
    <ItemTemplate>
    <P align="center">&nbsp;
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Selling price">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="Label2" runat="server">
    Market Prices:<%#DataBinder.Eval(Container.DataItem,"price")%>
    </asp:Label><BR>
    <asp:Label id="Label3" runat="server" ForeColor="#FF8000">
    Our Prices:<%# DataBinder.Eval(Container.DataItem,"ourprice") %></asp:Label></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Stock ">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="Label4" runat="server">
    <%#DataBinder.Eval(Container.DataItem,"count")%>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Order quantity">
    <ItemTemplate>
    <P align="center">
    <asp:TextBox id="TextBox1" runat="server" Text="1"></asp:TextBox></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Add Bag">
    <ItemTemplate>
    <asp:Button id="Button1" Runat="server" CommandName="Add" Text="Button"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
      

  10.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using web_bootnr.buss;namespace web_bootnr
    {
    /// <summary>
    /// BNR_Storev21 的摘要说明。
    /// </summary>
    public class BNR_Storev21 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.HyperLink HyperLink2;
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.HyperLink HyperLink1;
    protected System.Web.UI.WebControls.HyperLink HyperLink3;
    protected System.Web.UI.WebControls.HyperLink HyperLink4;
    protected System.Web.UI.WebControls.HyperLink HyperLink5;
    protected System.Web.UI.WebControls.HyperLink HyperLink6;
    protected System.Web.UI.WebControls.HyperLink HyperLink7;
    protected System.Web.UI.WebControls.HyperLink HyperLink8;
    protected System.Web.UI.WebControls.HyperLink HyperLink9;
    protected DataSet ds;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面

    if(!IsPostBack)
    {
    buss.buss buss = new web_bootnr.buss.buss();
    ds = new DataSet();
    ds = buss.Info(Convert.ToInt32(Request["index"]));
    DataGrid1.DataSource =ds.Tables[0];
    DataGrid1.DataKeyField = "id";
    DataGrid1.DataBind();

    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound_1);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void DataGrid1_ItemDataBound_1(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (e.Item.ItemType!=ListItemType.Header)
      {
       e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=\""+e.Item.Style["BACKGROUND-COLOR"]+"\"");
       e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");
      }
    } private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName=="Add")
    {
    TextBox lt = (TextBox)DataGrid1.Items[e.Item.ItemIndex].FindControl("TextBox1");
    Response.Write(lt.Text);
    }


    }
    }
      

  11.   

    TextBox CountText = (TextBox)e.item.FindControl("txtCount");
      

  12.   

    //更新购物车
        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            int i, j;
            DataGridItem item;
            string[] delItem = new string[5];
            j = 0;
            for (i = 0; i <= dgCart.Items.Count - 1; i++)
            {
                item = dgCart.Items[i];
                TextBox CountText = (TextBox)item.FindControl("txtCount");
                CheckBox chkDel = (CheckBox)item.FindControl("chkProductID");
                if (chkDel.Checked)
                {
                    delItem[j] = i.ToString();
                    j = j + 1;
                }
                Cart.Rows[i][3] = CountText.Text;
                Cart.Rows[i][4] = Convert.ToDouble(Cart.Rows[i][2]) * Convert.ToDouble(Cart.Rows[i][3]);
                Cart.Rows[i][8] = Convert.ToInt32(Cart.Rows[i][3]) * Convert.ToInt32(Cart.Rows[i][7]);
            }
            for (i = 0; i <= j - 1; i++)
            {
                int delI = Convert.ToInt32(delItem[i]);
                Cart.Rows[delI].Delete();
            }
            CalculateTotal();
            dgCart.DataSource = new DataView(Cart);
            dgCart.DataBind();
        }
      

  13.   


     
       
    if(e.CommandName=="Add")
    {
    TextBox tb = (TextBox)e.Item.Cells[5].FindControl("TextBox1");
    Response.Redirect(...);
    }
      
     
      

  14.   

    amandag(高歌) 
    我也试过,这样是可以的,但是就是不知道是什么原因
      

  15.   

    下面是我的测试代码,完全正常,你把你模版列的内容一个一个替换过去,看运行是否正常,应该这样是肯定能解决你的问题的<asp:datagrid id="DataGrid1" runat="server" Width="846px" AutoGenerateColumns="False" CssClass="title1"
    HorizontalAlign="Center" BorderColor="DarkGray" BackColor="White">
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BackColor="LightGray"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="Image merchandise">
    <ItemTemplate>
    <P align="center">
    <asp:Image id="Image1" runat="server" Width="100px" Height="80px" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"au_id")%>'>
    </asp:Image>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Product Name">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="id" runat="server" Visible="False">
    <%# DataBinder.Eval(Container.DataItem,"au_id") %>
    </asp:Label><A href='introduce.aspx?product=<%#DataBinder.Eval(Container.DataItem,"au_id")%>'><%#DataBinder.Eval(Container.DataItem,"au_id")%></A></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Size ">
    <ItemTemplate>
    <P align="center">&nbsp;
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Selling price">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="Label2" runat="server">
    Market Prices:<%#DataBinder.Eval(Container.DataItem,"state")%>
    </asp:Label><BR>
    <asp:Label id="Label3" runat="server" ForeColor="#FF8000">
    Our Prices:<%# DataBinder.Eval(Container.DataItem,"state") %></asp:Label></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Stock ">
    <ItemTemplate>
    <P align="center">
    <asp:Label id="Label4" runat="server">
    <%#DataBinder.Eval(Container.DataItem,"state")%>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Order quantity">
    <ItemTemplate>
    <P align="center">
    <asp:TextBox id="TextBox1" runat="server" Text="1"></asp:TextBox></P>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Add Bag">
    <ItemTemplate>
    <asp:Button id="Button1" Runat="server" CommandName="Add" Text="Button"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
      

  16.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    namespace WebDemo
    {
    /// <summary>
    /// WebForm2 的摘要说明。
    /// </summary>
    public class WebForm2 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1; private void BindGrid()
    {
    SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
    SqlDataAdapter da = new SqlDataAdapter("select au_id, state, contract from authors", cn);
    DataSet ds = new DataSet();
    cn.Open();
    da.Fill(ds);
    cn.Close();
    DataGrid1.DataSource = ds;
    DataGrid1.DataKeyField = "au_id";
    DataGrid1.DataBind();
    } private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    BindGrid();
    }
    }
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (e.Item.ItemType!=ListItemType.Header)
      {
       e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=\""+e.Item.Style["BACKGROUND-COLOR"]+"\"");
       e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");
      }
    } private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if(e.CommandName=="Add")
    {
    TextBox lt = (TextBox)DataGrid1.Items[e.Item.ItemIndex].FindControl("TextBox1");
    Response.Write(lt.Text);
    }

    }
    }
      

  17.   

    谢谢各位,原来是我的页面多出个form导致代码不执行...