糊涂了,以前做过的一个简单问题?

tvmark 2005-12-07 02:50:37
<asp:TemplateColumn HeaderText="username">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"user_name")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="edituser_name" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>

在update_command中用TextBox tempvalue=(TextBox)e.Item.Cells[2].Controls[0];获取参数。结果出错:
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 指定的转换无效。
请问这条语句应该怎么写?

...全文
130 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigIdiot628 2005-12-08
  • 打赏
  • 举报
回复
呵呵……
帮你顶一下。
tvmark 2005-12-08
  • 打赏
  • 举报
回复
这是全部的代码了,各位帮帮我呀!!!!我急死了
tvmark 2005-12-08
  • 打赏
  • 举报
回复
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="NPDP.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<script language="javascript">
<!--
function Set_date(objtarget)
{
var strTable = "getdate.htm";
var c = window.showModalDialog(strTable,"", "status:no;dialogWidth:340px;dialogHeight:170px;scroll: no; resizable: yes; help:no");
if (c != null)
{ objtarget.value = c; }
}
//--> </script>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体"><INPUT style="Z-INDEX: 101; LEFT: 352px; POSITION: absolute; TOP: 8px" onclick="Set_date(Text1);"
type="button" value="Button"></FONT>
<asp:datagrid id="DataGrid1" style="Z-INDEX: 104; LEFT: 120px; POSITION: absolute; TOP: 88px"
runat="server" OnCancelCommand="Cancel_Command" OnUpdateCommand="Update_Command" OnEditCommand="Edit_Command"
DataKeyField="id" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn HeaderText="id">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"id")%>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="id" Runat="server" text='<%# DataBinder.Eval(Container.DataItem,"id").ToString().Trim()%>'>
</asp:Label>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="username">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"user_name")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="edituser_name" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"user_name")%>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="date">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"mydate")%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="修改" HeaderText="操作" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
</asp:datagrid><asp:button id="Button1" style="Z-INDEX: 103; LEFT: 424px; POSITION: absolute; TOP: 16px" runat="server"
Text="Button"></asp:button><INPUT id="Text1" style="Z-INDEX: 102; LEFT: 184px; POSITION: absolute; TOP: 8px" type="text"
name="Text1" runat="server">
<asp:label id="Label1" style="Z-INDEX: 105; LEFT: 176px; POSITION: absolute; TOP: 48px" runat="server"
Height="24px" Width="72px">Label</asp:label></form>
</body>
</HTML>
tvmark 2005-12-08
  • 打赏
  • 举报
回复
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;

namespace NPDP
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.HtmlControls.HtmlInputText Text1;

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

DataGridBind();
}

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

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write(Text1.Value);
}

public void Edit_Command(object sender,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=e.Item.ItemIndex;
DataGridBind();

}

public void Update_Command(object sender,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
NPDP.component.userinfo mbp = new NPDP.component.userinfo();
Label lb=(Label)e.Item.FindControl("id");
mbp.id=Convert.ToInt32(lb.Text.Trim());
string temp=((TextBox)e.Item.FindControl("edituser_name")).Text;
string tempvalue=((TextBox)e.Item.Cells[1].Controls[1]).Text;
mbp.purview="aa";
mbp.mydate=DateTime.Now;
NPDP.until.userinfo.Update(mbp);
DataGrid1.EditItemIndex=-1;
DataGridBind();
}

public void Cancel_Command(object sender,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{

}
}
}
adamzb 2005-12-07
  • 打赏
  • 举报
回复
贴代码看看
tvmark 2005-12-07
  • 打赏
  • 举报
回复
怎么没人回答我呀???????????
tvmark 2005-12-07
  • 打赏
  • 举报
回复
把cells[2]成cells[1]后是不报错了,可还是获取不到数据
caicaibao 2005-12-07
  • 打赏
  • 举报
回复
TextBox tempvalue=(TextBox)e.Item.FindContorl("edituser_name");
adamzb 2005-12-07
  • 打赏
  • 举报
回复
你的 Cells[2]对吗?
列要从0开始。
working1997 2005-12-07
  • 打赏
  • 举报
回复
你的DataGrid一共几列啊??index是从0开始的,也就是0代表第一列,1代表第2列,2代表第3列
tvmark 2005-12-07
  • 打赏
  • 举报
回复
改成:string tempvalue=((TextBox)e.Item.Cells[2].Controls[1]).Text;
后还是报错,提示:

指定的参数已超出有效值的范围。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index
急呀,那位快帮帮我呀
xczgb 2005-12-07
  • 打赏
  • 举报
回复
楼上正解
working1997 2005-12-07
  • 打赏
  • 举报
回复
Controls[0]---->Controls[1] 因为你用的是模板列
adamzb 2005-12-07
  • 打赏
  • 举报
回复
TextBox tempvalue=(TextBox)e.Item.Cells[2].Controls[0];
改为:
...=((TextBox)e.Item.Cells[2].Controls[1]).Text;

62,046

社区成员

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

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

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

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