帮忙看下这句 错在哪里啊……各位大大们!
“/”应用程序中的服务器错误。--------------------------------------------------------------------------------
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
源错误:
行 51: SqlCommand commnd2 = new SqlCommand(strsql2, connections);
行 52: commnd.Parameters.Add(new SqlParameter("@userid", SqlDbType.VarChar, 50));
行 53: commnd.Parameters["@userid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
行 54: commnd2.Parameters.Add(new SqlParameter("@userid", SqlDbType.VarChar, 50));
行 55: commnd2.Parameters["@userid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
--------------------编程问答-------------------- 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
......
貌似错误消息已经说得很清楚了吧.... --------------------编程问答-------------------- 你自己不会调试的吗? --------------------编程问答--------------------
提示够清楚了。。。
commnd.Parameters["@userid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
红色部分。。。这个得到出为个负数。。。肯定不对。。。
DataGrid1.DataKeys索引从0开始。。
断点一下。。看红色部分为什么没取到东西。。 --------------------编程问答-------------------- 关键是我不会调试啊…… 网上下的个源码 能帮忙说下怎么调试哇? --------------------编程问答-------------------- 代码贴全点,你是在什么事件里面写这些代码的?
还有datakey在绑定数据源的时候是否已经指定过 --------------------编程问答-------------------- F9下断点,执行,F10一步步执行看! --------------------编程问答-------------------- using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class addteacher : System.Web.UI.Page
{
SqlConnection connections;
protected void Page_Load(object sender, EventArgs e)
{
//若用户未登录系统
if (Session["user_id"] == null)
{
//返回到登录页面
Response.Redirect("default.aspx");
}
//若用户身份不是管理员
if ((int)Session["user_lever"] != 1)
{
Response.Redirect("default.aspx");
}
this.Title = "添加新教师";
string strconn = System.Configuration.ConfigurationManager.AppSettings["connstring"];
connections = new SqlConnection(strconn);
//connections.Open();
}
protected void ltbnAdd_Click(object sender, EventArgs e)
{
if (txtNo.Text == "" || txtName.Text == "")
{
Response.Write("<script language=javascript>alert('请填写所有数据!');</script>");
return;
}
//调用存放的SQL Server中的添加教师存储过程“addtea”
SqlCommand commnd = new SqlCommand("addtea", connections);
commnd.CommandType = CommandType.StoredProcedure;
commnd.Parameters.Add(new SqlParameter("@tid", SqlDbType.VarChar, 50));
commnd.Parameters["@tid"].Value = txtNo.Text;
commnd.Parameters.Add(new SqlParameter("@tname", SqlDbType.VarChar, 50));
commnd.Parameters["@tname"].Value = txtName.Text;
commnd.Parameters.Add(new SqlParameter("@tcol", SqlDbType.VarChar, 50));
commnd.Parameters["@tcol"].Value = dropCollege.SelectedItem.Text;
commnd.Connection.Open();
try
{
commnd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('记录添加成功!');</script>");
}
catch (SqlException)
{
Response.Write("<script language=javascript>alert('记录添加失败, 请检查输入数据!');</script>");
}
commnd.Connection.Close();
}
protected void lbtnBack_Click(object sender, EventArgs e)
{
Response.Redirect("admin_teacher.aspx");
}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
SqlCommand commnd = new SqlCommand("select * from tabtea where Tid=@Tid", connections);
commnd.Parameters.Add("@Tid", SqlDbType.VarChar, 50);
commnd.Parameters["@Tid"].Value = txtNo.Text;
SqlDataReader sdreader = commnd.ExecuteReader();
if (sdreader.Read()) //若找到编号相同的记录
{
CustomValidator1.IsValid = false;//验证失败
}
else
{
CustomValidator1.IsValid = true; //验证成功
}
connections.Close();
}
}
--------------------编程问答-------------------- using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class admin_teacher : System.Web.UI.Page
{
SqlConnection connections;
string strsql;
protected void Bindgrid()
{
strsql = "select * from tabtea";
SqlDataAdapter da = new SqlDataAdapter(strsql, connections);
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource = ds;
DataGrid1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
lbtnTeacher.Enabled = false;
if (Session["user_id"] == null)
{
Response.Redirect("default.aspx");
}
this.Title = "教师管理";
string conn = System.Configuration.ConfigurationManager.AppSettings["connstring"];
connections = new SqlConnection(conn);
if (!IsPostBack)
{
Bindgrid();
}
}
public void DataGrid_delete(object sender, DataGridCommandEventArgs e)
{
int lastPageIndex = DataGrid1.CurrentPageIndex;
string strsql = "delete from tabtea where Tid=@tid";
string strsql2 = "delete from tabtea_cour where Tid=@tid";
SqlCommand commnd = new SqlCommand(strsql, connections);
SqlCommand commnd2 = new SqlCommand(strsql2, connections);
commnd.Parameters.Add(new SqlParameter("@tid", SqlDbType.VarChar, 50));
commnd.Parameters["@tid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
commnd2.Parameters.Add(new SqlParameter("@tid", SqlDbType.VarChar, 50));
commnd2.Parameters["@tid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
commnd.Connection.Open();
try
{
if (DataGrid1.PageCount - DataGrid1.CurrentPageIndex == 1 && DataGrid1.Items.Count == 1)
{
if (DataGrid1.PageCount > 1)
{
lastPageIndex = lastPageIndex - 1;
}
else
{
lastPageIndex = 0;
}
}
DataGrid1.CurrentPageIndex = lastPageIndex;
commnd2.ExecuteNonQuery();
commnd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据删除成功!');</script>");
}
catch (SqlException ex)
{
Response.Write("<script language=javascript>alert('数据删除失败!');</script>");
Response.Write(ex.Message);
}
commnd.Connection.Close();
commnd2.Connection.Close();
Bindgrid();
}
public void DataGrid_update(object sender, DataGridCommandEventArgs e)
{
string strsql = "update tabtea set Tname=@tname,Tcol=@tcol where Tid=@tid";
SqlCommand commnd = new SqlCommand(strsql, connections);
commnd.Parameters.Add(new SqlParameter("@tname", SqlDbType.VarChar, 50));
commnd.Parameters.Add(new SqlParameter("@tcol", SqlDbType.VarChar, 50));
commnd.Parameters.Add(new SqlParameter("@tid", SqlDbType.VarChar, 50));
string colvalue = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
commnd.Parameters["@tname"].Value = colvalue;
colvalue = ((TextBox)e.Item.Cells[4].Controls[0]).Text;
commnd.Parameters["@tcol"].Value = colvalue;
commnd.Parameters["@tid"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
commnd.Connection.Open();
try
{
commnd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('数据修改成功!');</script>");
DataGrid1.EditItemIndex = -1;
}
catch (SqlException)
{
Response.Write("<script language=javascript>alert('数据修改失败,请检查输入!');</script>");
}
commnd.Connection.Close();
Bindgrid();
}
public void DataGrid_Page(object sender, DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
Bindgrid();
}
public void DataGrid_cancel(object sender, DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = -1;
Bindgrid();
}
public void DataGrid_edit(object sender, DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = (int)e.Item.ItemIndex;
Bindgrid();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
string sqlstring;
DataGrid1.CurrentPageIndex = 0;
if (DropType.Text == "编号")
{
sqlstring = "select * from tabtea where Tid='" + txtKeyword.Text + "'";
}
else
{
sqlstring = "select * from tabtea where Tname='" + txtKeyword.Text + "'";
}
SqlDataAdapter da = new SqlDataAdapter(sqlstring, connections);
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource = ds;
DataGrid1.CurrentPageIndex = 0;
DataGrid1.DataBind();
if (DataGrid1.Items.Count == 0)
{
Response.Write("<script language=javascript>alert('查无此人,请检查输入!');</script>");
return;
}
}
protected void lbtnDisplayAll_Click(object sender, EventArgs e)
{
Bindgrid();
}
protected void lbtnAdd_Click(object sender, EventArgs e)
{
Response.Redirect("addteacher.aspx");
}
protected void lbtnQuit_Click(object sender, EventArgs e)
{
Session.Clear();
Response.Redirect("default.aspx");
}
protected void lbtnCourse_Click(object sender, EventArgs e)
{
Response.Redirect("admin_course.aspx");
}
protected void lbtnStudent_Click(object sender, EventArgs e)
{
Response.Redirect("admin_stu.aspx");
}
protected void lbtnResult_Click(object sender, EventArgs e)
{
Response.Redirect("admin_grade.aspx");
}
protected void lbtnClass_Click(object sender, EventArgs e)
{
Response.Redirect("admin_class.aspx");
}
protected void lbtnSelect_Click(object sender, EventArgs e)
{
Response.Redirect("admin_choose.aspx");
}
protected void lbtnTeacher_Click(object sender, EventArgs e)
{
Response.Redirect("admin_teacher.aspx");
}
}
--------------------编程问答--------------------
描述的非常清楚了。。。加断点调试下
DataGrid1.DataKeys[(int)e.Item.ItemIndex];明显e.Item.ItemIndex这个值 超出了DataGrid1.DataKeys集合的最大值
--------------------编程问答-------------------- 如何修改过啊?
堆栈跟踪:
[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +7486296
System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index) +12
admin_stu.DataGrid_delete(Object sender, DataGridCommandEventArgs e) in g:\网站测试\jwgl\admin_stu.aspx.cs:53
System.Web.UI.WebControls.DataGrid.OnDeleteCommand(DataGridCommandEventArgs e) +108
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) +565
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
--------------------编程问答-------------------- 断点,F11,单步调试 --------------------编程问答-------------------- F9 F11 --------------------编程问答-------------------- 大哥,就是你给下GRIDVIEW控件的datakeysName就好了,看看没有那个索引,就写那个字段 --------------------编程问答-------------------- 前台数据绑定的时候,DataKey设置了什么? 代码贴出来
补充:.NET技术 , ASP.NET