无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.InvalidCastException: 无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。源错误:行 69: string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
行 70: //注意:以下cells的索引值可能会随着设计的进行发生变化,关键是正确地检测出 “公司名称”和 “联系人姓名”两个字段的索引值!!!
行 71: string companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim();
行 72: string 联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString().Trim();
行 73: SqlConnection con = DB.createCon();
源文件: e:\MYASPNET\st13\Default.aspx.cs 行: 71堆栈跟踪:[InvalidCastException: 无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。]
_Default.GridView1_RowUpdating(Object sender, GridViewUpdateEventArgs e) in e:\MYASPNET\st13\Default.aspx.cs:71
System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs e) +139
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +808
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +855
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +121
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +125
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +169
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +9
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.InvalidCastException: 无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。源错误:行 69: string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
行 70: //注意:以下cells的索引值可能会随着设计的进行发生变化,关键是正确地检测出 “公司名称”和 “联系人姓名”两个字段的索引值!!!
行 71: string companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim();
行 72: string 联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString().Trim();
行 73: SqlConnection con = DB.createCon();
源文件: e:\MYASPNET\st13\Default.aspx.cs 行: 71堆栈跟踪:[InvalidCastException: 无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。]
_Default.GridView1_RowUpdating(Object sender, GridViewUpdateEventArgs e) in e:\MYASPNET\st13\Default.aspx.cs:71
System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs e) +139
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +808
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +855
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +121
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +125
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +169
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +9
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
解决方案 »
- 为了与用户互动,都会提供用户输入文字交流,如何防止恶意代码?
- 新手提问:特定行转化成列的问题,在dataset,datatable,或GridView中实现行列转换
- 怎样一次取出指定ID号记录的前两条及后两条记录?
- 特殊的URL,如何处理的?
- ********100分,求高手给我讲一个asp.net中多态的例子,越简单直观越好(必须有代码的)
- 请问一个比较简单的问题
- 这是什么的编码变换(急!!)
- 哪位高手用.net做过微信?帮忙看看这段代码为什么不能实现被关注时自动回复图文消息?
- 怎样将windows窗体(用c#作的一个类)显示在ie中,类是否用注册
- 怎么利用html的超链接打开一个无工具栏的新窗口?
- 100分 高手进 asp.net后台静态方法怎么调用非静态方法
- 各位帮忙看一下这个注册模块
GridView1.Rows[e.RowIndex].FindControl("TextBoxID") as TextBox
companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim();
联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString()Trim(); 错的 是这两句
没明白楼主的意思
序号是从0开始的,你只要没有弄错的话,并且该列确实是HyperLink的话,那样写就不会有错。那现在又报什么错呢?
楼主想要做什么事情,如果光取值何必转换呢。
{
string companyname="" ;
string 联系人姓名="";
// 返回选定行的主键值
string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
//注意:以下cells的索引值可能会随着设计的进行发生变化,关键是正确地检测出 “公司名称”和 “联系人姓名”两个字段的索引值!!!
//companyname = ((TextBox)(GridView1.Rows[1].Cells[1].Controls[0]).FindControl("TextBox1")).Text.ToString().Trim());
//联系人姓名 =((TextBox)(GridView1.Rows[2].Cells[1].Controls[0]).FindControl("TextBox2")).Text.ToString().Trim());
companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[1])).Text.ToString().Trim();
联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
SqlConnection con = DB.createCon();
SqlCommand cmd = new SqlCommand("update 供应商 set 公司名称= '" + companyname + "', 联系人姓名='" + 联系人姓名 + "' where 供应商ID='" + empID + "'", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.GridView1.EditIndex = -1;
BindGrid();
}
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page
{
public DataSet ds = new DataSet();//建立数据集对象
protected void Page_Load(object sender, EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!this.IsPostBack)
{
BindGrid();
}
this.GridView1.AllowPaging = true;
this.GridView1.AllowSorting = true;
} private void BindGrid()
{
//数据绑定方法
SqlConnection con = DB.createCon();
SqlDataAdapter sda = new SqlDataAdapter("select * from 供应商", con);
sda.Fill(ds, "emp"); //装填数据集DataSet
//和更新按钮有关,需要设置主键*****************
this.GridView1.DataKeyNames = new string[] { "供应商ID" };//索引关键字
//************************************************
this.GridView1.DataSource = ds.Tables["emp"].DefaultView;
this.GridView1.DataBind(); DropDownList1.DataSource = ds.Tables["emp"].DefaultView;
DropDownList1.DataTextField = "公司名称";//下拉列表框显示内容
DropDownList1.DataValueField = "供应商ID";//下拉列表框的值内容
DropDownList1.DataBind();
}
protected void lbGO_Click(object sender, EventArgs e)
{
GridViewRow pagerRow = GridView1.BottomPagerRow;
TextBox pageNum = pagerRow.Cells[0].FindControl("tbPage") as TextBox;
if (pageNum.Text != null)
{
if (Convert.ToInt32(pageNum.Text) > 0 && Convert.ToInt32(pageNum.Text)<= GridView1.PageCount)
GridView1.PageIndex = Convert.ToInt32(pageNum.Text) - 1;
}
BindGrid(); //调用上面的BindGrid()绑定
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
if (e.NewPageIndex >= 0 && e.NewPageIndex < GridView1.PageCount)
this.GridView1.PageIndex = e.NewPageIndex;
BindGrid(); //调用上面的BindGrid()绑定
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string companyname="" ;
string 联系人姓名="";
// 返回选定行的主键值
string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
//注意:以下cells的索引值可能会随着设计的进行发生变化,关键是正确地检测出 “公司名称”和 “联系人姓名”两个字段的索引值!!!
//companyname = ((TextBox)(GridView1.Rows[1].Cells[1].Controls[0]).FindControl("TextBox1")).Text.ToString().Trim());
//联系人姓名 =((TextBox)(GridView1.Rows[2].Cells[1].Controls[0]).FindControl("TextBox2")).Text.ToString().Trim());
companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[1])).Text.ToString().Trim();
联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
SqlConnection con = DB.createCon();
SqlCommand cmd = new SqlCommand("update 供应商 set 公司名称= '" + companyname + "', 联系人姓名='" + 联系人姓名 + "' where 供应商ID='" + empID + "'", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.GridView1.EditIndex = -1;
BindGrid();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
// 返回选定行的主键值
string SupID=this.GridView1.DataKeys[e.RowIndex].Value.ToString();
SqlConnection con=DB.createCon();
SqlCommand cmd=new SqlCommand("delete 供应商 where 供应商ID='"+SupID+"'",con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.GridView1.EditIndex=-1;
BindGrid();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//单向排序设置
//ViewState["Order"] = "ASC"; //按递增排序,递减为:DESC
//上行代码要放在此事件以外,可放在page_load事件中
//双向排序设置:如果原来是降序则改为升序,反之亦然
if((string)ViewState["Order"]=="DESC")
ViewState["Order"] = "ASC";
else
ViewState["Order"] = "DESC";
SqlConnection con=DB.createCon(); //连接 FPNWIND 库
SqlDataAdapter sda = new SqlDataAdapter("select * from 供应商",con);
//DataSet对象 ds 已经在前面定义);
sda.Fill(ds,"emp");
//设定默认视图DefaultView来排序
ds.Tables["emp"].DefaultView.Sort=e.SortExpression+" "+ViewState["Order"].ToString();
this.GridView1.DataSource=ds.Tables["emp"].DefaultView;
this.GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow dl in this.GridView1.Rows)
{
CheckBox chk = (CheckBox)dl.FindControl("chkSelect");
if (chk.Checked)
{
this.Label3.Text += this.GridView1.DataKeys[dl.RowIndex].Value.ToString()+ ", ";
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection con=DB.createCon();
SqlCommand cmd = new SqlCommand("delete from 供应商 where 供应商ID='"
+DropDownList1.SelectedItem.Value+"'",con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.GridView1.EditIndex = -1;
this.BindGrid();
}
protected void Button3_Click(object sender, EventArgs e)
{
this.Label3.Text = "";
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
BindGrid();
}
}
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.InvalidCastException: 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。源错误:行 74: //联系人姓名 =((TextBox)(GridView1.Rows[2].Cells[1].Controls[0]).FindControl("TextBox2")).Text.ToString().Trim());
行 75: companyname = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[1])).Text.ToString().Trim();
行 76: 联系人姓名 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
行 77: SqlConnection con = DB.createCon();
行 78: SqlCommand cmd = new SqlCommand("update 供应商 set 公司名称= '" + companyname + "', 联系人姓名='" + 联系人姓名 + "' where 供应商ID='" + empID + "'", con);