为什么取不到datagrid模版列中textbox的值!50分送上

hui1202 2007-05-13 03:32:48
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的值,请高手们看看!谢谢
...全文
468 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hui1202 2007-05-16
  • 打赏
  • 举报
回复
谢谢各位,原来是我的页面多出个form导致代码不执行...
yuanzhihua520 2007-05-16
  • 打赏
  • 举报
回复
up
hui1202 2007-05-14
  • 打赏
  • 举报
回复
amandag(高歌)
我也试过,这样是可以的,但是就是不知道是什么原因
wuxing2006 2007-05-14
  • 打赏
  • 举报
回复



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




amandag 2007-05-14
  • 打赏
  • 举报
回复
我试过你的代码,把其他的模版列都删除,只留文本框和按钮,是可以取出值并在页面输出的
killau 2007-05-14
  • 打赏
  • 举报
回复
//更新购物车
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();
}
killau 2007-05-14
  • 打赏
  • 举报
回复
TextBox CountText = (TextBox)e.item.FindControl("txtCount");
hui1202 2007-05-14
  • 打赏
  • 举报
回复
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);
}
}







}
}
hui1202 2007-05-14
  • 打赏
  • 举报
回复
<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"> 
<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>
wenjunqianli 2007-05-14
  • 打赏
  • 举报
回复
看看关联事件有没有丢.
amandag 2007-05-14
  • 打赏
  • 举报
回复
你的ItemCommand注册的事件是否丢失了

贴贴你的代码看看
hui1202 2007-05-14
  • 打赏
  • 举报
回复
测了很多遍就是取不到值,各种方法都试了,就是取不出,而且用button根本不执行ItemCommand,用linkbutton取的就是初始值
amandag 2007-05-14
  • 打赏
  • 举报
回复
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);
}
}
}
}
amandag 2007-05-14
  • 打赏
  • 举报
回复
下面是我的测试代码,完全正常,你把你模版列的内容一个一个替换过去,看运行是否正常,应该这样是肯定能解决你的问题的

<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"> 
<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>
hui1202 2007-05-14
  • 打赏
  • 举报
回复
请问有人遇到过这样的情况吗
liutianyuzj 2007-05-13
  • 打赏
  • 举报
回复
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");
amandag 2007-05-13
  • 打赏
  • 举报
回复
if(e.CommandName=="Add")
{
TextBox tb = (TextBox)e.Item.Cells[5].FindControl("TextBox1");
Response.Redirect(...);
}
cooolchen 2007-05-13
  • 打赏
  • 举报
回复
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+"");
hui1202 2007-05-13
  • 打赏
  • 举报
回复
不是Response.Redirect("ship-bag.aspx?num="+((TextBox)(e.Item.FindControl("TextBox1"))).Text+"&val="+tb.Text);对不对的问题,tb.text根本没有值,我也知道我前面那句写错了
dm0351 2007-05-13
  • 打赏
  • 举报
回复
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);

加载更多回复(1)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧