再开帖问同样的问题,高手进来帮看看错误!
我写的代码如下:
aspx:
<table align= "center " border= "0 " cellpadding= "0 " cellspacing= "2 " style= "left: 0px;position: relative; top: 0px " width= "90% ">
<tr>
<td>
<asp:DataList id= "list1 " Runat= "server " Width= "100% ">
<ItemTemplate>
<table border= "0 " cellpadding= "0 " cellspacing= "0 " width= "100% ">
<tr class= "altbg2 " onmouseover= "this.className= 'altbg1 ' " onmouseout= "this.className= 'altbg2 ' " align= "center ">
<td width= "10% "> <asp:CheckBox ID= "chkSelect " runat= "server " /> </td>
<td width= "28% " align= "left "> <%# Eval( "chanpinmingcheng ") %> </td>
<td width= "13% "> <%# Eval( "fabushijian ") %> </td>
<td width= "8% "> <a href= 'zhanqu_edit.aspx?id= <%# Eval( "zh_id ") %> '> [ 编辑 ] </a> </td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID= "chkall " runat= "server " Text= "全选 " onclick= "chkSelect(); " />
<asp:ImageButton ID= "ImageButton1 " src= "images/shanchu.bmp " runat= "server " Style= "position: relative " OnClick= "ImageButton1_Click " /> //删除选中的
</td>
</tr>
</table>
cs:
SqlConnection conn;
SqlCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
{
string aa = Session[ "name "].ToString();
conn = new SqlConnection (System.Configuration.ConfigurationSettings.AppSettings[ "ConnStr "]);
conn.Open();
SqlCommand cmd = new SqlCommand( "select * from zhanquxinxi where faburen= ' " + aa + " ' and shenhe=1 order by fabushijian desc ", conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "zhanquxinxi ");
pager1.RecordCount = ds.Tables[ "zhanquxinxi "].Rows.Count;
this.list1.DataSource = ds.Tables[ "zhanquxinxi "];
list1.DataKeyField = ds.Tables[ "zh_id "].ToString();
list1.DataBind();
conn.Close();
BindData1();
}
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
int[] ID = new int[list1.Items.Count];
int i = 0;
foreach (DataListItem dl in list1.Items)
{
CheckBox chk = (CheckBox)dl.FindControl( "chkSelect ");
if (chk.Checked)
{
ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex].ToString());
try
{
conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ "ConnStr "]);
conn.Open();
cmd = new SqlCommand( "delete from zhanquxinxi where zh_id=ID[i] ", conn);
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
Response.Write(exp.Message);
}
}
}
BindData1();
}
报错:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
源错误:
行 171: if (chk.Checked)
行 172: {
行 173: ID[i] = Convert.ToInt32(list1.DataKeys[dl.ItemIndex].ToString());
行 174: try
行 175: {
源文件: c:\Inetpub\wwwroot\houtai\Medicine\zqcpxxfb.aspx.cs 行: 173
堆栈跟踪:
[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +2775837
System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index) +9
zqcpxxfb.ImageButton1_Click(Object sender, ImageClickEventArgs e) in c:\Inetpub\wwwroot\houtai\Medicine\zqcpxxfb.aspx.cs:173
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +75
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4919
--------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
[解决办法]
你在那行设置一个断点,象这种问题,一般都是第一条和最后一条时候出现的问题。
以上。
[解决办法]
索引超出范围。必须为非负值并小于集合大
[解决办法]
int[] ID = new int[list1.Items.Count];应该是这里的问题
[解决办法]
断点调试,找到数组那个地方看看索引是不是超出了范围?
[解决办法]
调试int[] ID = new int[list1.Items.Count];
查看 list1.Items.Count 是否存在;
cmd = new SqlCommand( "delete from zhanquxinxi where zh_id=ID[i] ", conn);
这句话也是错的 ,zh_id=ID[i] "---》zh_id= '+ID[i].ToString()+ " ' ",
[解决办法]
倒过来,从最后一条往前遍历试试
[解决办法]
解决了``那就接个分
[解决办法]
int[] ID = new int[list1.Items.Count+1];
[解决办法]
int[] ID = new int[list1.Items.Count];
这句改一下:
int[] ID = new int[list1.Items.Count-1];