C# 将更新添加到gridview时出错

C# 将更新添加到gridview时出错,c#,asp.net,sql-server-2008,gridview,C#,Asp.net,Sql Server 2008,Gridview,我正在尝试为我的gridview添加和更新函数。我遇到错误,无法将类型为“System.Web.UI.WebControl.DataControlInkButton”的对象强制转换为类型为“System.Web.UI.WebControl.TextBox” 下面是我的代码和存储过程。有人能看出我哪里出了问题吗。当我尝试为电子邮件传递参数时,它会收到错误。 谢谢 protectedvoid gridview\u行更新(对象发送方,GridViewUpdateEventArgs e) { SqlDa

我正在尝试为我的gridview添加和更新函数。我遇到错误,无法将类型为“System.Web.UI.WebControl.DataControlInkButton”的对象强制转换为类型为“System.Web.UI.WebControl.TextBox”

下面是我的代码和存储过程。有人能看出我哪里出了问题吗。当我尝试为电子邮件传递参数时,它会收到错误。 谢谢

protectedvoid gridview\u行更新(对象发送方,GridViewUpdateEventArgs e)
{
SqlDataReader myDataReader=默认值(SqlDataReader);
SqlConnection MyConnection=新的SqlConnection(ConfigurationManager.ConnectionString[“救援动物导向连接字符串”].ConnectionString);
SqlCommand=newsqlcommand(“sp_updaterescuedtails”,MyConnection);
如果(!User.Identity.IsAuthenticated)
{
}
其他的
{
command.Parameters.Add(“@PostalAddress”,SqlDbType.VarChar).Value=((TextBox)GridViewED.Rows[e.RowIndex]。单元格[1]。控件[0])。文本;
command.Parameters.Add(“@TelephoneNo”,SqlDbType.VarChar).Value=((TextBox)gridview.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
command.Parameters.Add(“@Website”,SqlDbType.VarChar).Value=((TextBox)gridview.Rows[e.RowIndex].Cells[3].Controls[0]).Text;
command.Parameters.Add(“@Email”,SqlDbType.VarChar).Value=((TextBox)gridview.Rows[e.RowIndex].Cells[4].Controls[0]).Text;
}
尝试
{
command.CommandType=CommandType.storedProcess;
MyConnection.Open();
myDataReader=command.ExecuteReader(CommandBehavior.CloseConnection);
//myDataReader.Read();
GridViewED.DataSource=myDataReader;
gridview.DataBind();
如果(GridViewED.Rows.Count>=1)
{
GridViewED.Visible=true;
lblMsg.Visible=false;
}
else if(gridviewsed.Rows.Count<1)
{
GridViewED.Visible=false;
lblMsg.Text=“您的搜索条件未返回任何结果。”;
lblMsg.Visible=true;
}
MyConnection.Close();
}
捕获(SqlException SQLexc)
{
Write(“读取失败:+SQLexc.ToString());
}
GridViewED.EditIndex=-1;
}
}
Alter PROC[dbo].[sp\U UPDATERESCUEDEALETAILS]
(
@用户名nvarchar(50),
@邮资女皇(50),
@电话号码:nvarchar(50),
@nvarchar网站(50),
@电子邮件nvarchar(50)
)
作为
开始
更新[详情]
设置[邮递地址]=@PostalAddress[电话号码]=@TelephoneNo,
[网站]=@网站,[电子邮件]=@电子邮件
其中[UserName]=@UserName

我建议
gridview.Rows[e.RowIndex].Cells[4].Controls[0]
上的控件不是
文本框。如果您的单元格编号或
控件
索引错误,则没有其他建议?此外,可能电子邮件文本框在网格中的位置不正确?

是的,它太简单了。我已经开始从1开始计算单元格,但应该从0开始。谢谢
    protected void GridViewED_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
                SqlDataReader myDataReader = default(SqlDataReader);

                SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["RescueAnimalsIrelandConnectionString"].ConnectionString);
                SqlCommand command = new SqlCommand("sp_UpdateRescueDetails", MyConnection);

                if (!User.Identity.IsAuthenticated)
                {
                }
                else
                {
                    command.Parameters.Add("@PostalAddress", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[1].Controls[0]).Text;

                    command.Parameters.Add("@TelephoneNo", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[2].Controls[0]).Text;

                    command.Parameters.Add("@Website", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

                    command.Parameters.Add("@Email", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[4].Controls[0]).Text;

                }

                try
                {
                    command.CommandType = CommandType.StoredProcedure;
                    MyConnection.Open();


                    myDataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
                    // myDataReader.Read();


                    GridViewED.DataSource = myDataReader;
                    GridViewED.DataBind();

                    if (GridViewED.Rows.Count >= 1)
                    {

                        GridViewED.Visible = true;
                        lblMsg.Visible = false;

                    }
                    else if (GridViewED.Rows.Count < 1)
                    {
                        GridViewED.Visible = false;

                        lblMsg.Text = "Your search criteria returned no results.";
                        lblMsg.Visible = true;
                    }

                    MyConnection.Close();
                }
                catch (SqlException SQLexc)
                {
                    Response.Write("Read Failed : " + SQLexc.ToString());
                }
                GridViewED.EditIndex = -1;
            }
        }




 Alter PROC [dbo].[sp_UpdateRescueDetails]
 (
 @UserName nvarchar(50),
 @PostalAddress nvarchar(50),
 @TelephoneNo nvarchar (50),
 @Website nvarchar(50),
 @Email nvarchar(50)
 )
 AS
 BEGIN


Update [RescueDetails]
set [PostalAddress] = @PostalAddress, [Telephone_No] = @TelephoneNo, 
[Website] = @Website, [Email] = @Email 
 Where [UserName] = @UserName