在DataGrid分页删除操作中出错啦! 我在DataGrid分页删除操作中老出现如下错误,该怎么办啊??请高手帮忙啊!出现错误:索引超出范围。必须为非负值并小于集合大小。参数名: index 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 .CS页: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;using System.Data.SqlClient;namespace DataGridTest{ /// <summary> /// ZhuCongTable 的摘要说明。 /// </summary> public class ZhuCongTable : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid dgPar; protected System.Web.UI.WebControls.DataGrid dgSub; protected String ConnString = "Server=.;Uid=sa;Pwd=;Database=test"; private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { this.BindData();// this.BindToDataGrid(); } } private void BindData() { SqlDataAdapter adapter = new SqlDataAdapter("select * from Employees", ConnString); DataTable dt = new DataTable(); adapter.Fill(dt); dgPar.DataSource = dt; dgPar.DataBind(); } // 获取子表数据并填充另外一个DataGrid private void GetSubDataBind(string id) { string subQuery = "select * from Orders where EmployeeID=@EmployeeID"; SqlDataAdapter adapter = new SqlDataAdapter(subQuery, ConnString); adapter.SelectCommand.Parameters.Add("@EmployeeID", SqlDbType.Int); adapter.SelectCommand.Parameters["@EmployeeID"].Value = id; DataTable dt = new DataTable(); adapter.Fill(dt); dgSub.DataSource = dt; dgSub.DataBind(); } private void BindToDataGrid() { SqlConnection con=DB.createCon(); SqlDataAdapter sda=new SqlDataAdapter(); sda.SelectCommand=new SqlCommand("select * from Orders where EmployeeID=@EmployeeID", con); DataSet ds=new DataSet(); sda.Fill(ds,"Orders"); this.dgSub.DataKeyField="OrderID"; this.dgSub.DataSource=ds.Tables["Orders"]; this.dgSub.DataBind(); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.dgPar.SelectedIndexChanged += new System.EventHandler(this.dgPar_SelectedIndexChanged); this.dgSub.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgSub_PageIndexChanged); this.dgSub.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_CancelCommand); this.dgSub.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_EditCommand); this.dgSub.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_UpdateCommand); this.dgSub.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_DeleteCommand); this.dgSub.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgSub_ItemDataBound); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void dgPar_SelectedIndexChanged(object sender, System.EventArgs e) { string id = dgPar.Items[dgPar.SelectedIndex].Cells[1].Text; GetSubDataBind(id); } private void dgSub_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { //删除对应的列 string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString(); SqlConnection con=DB.createCon(); SqlCommand cmd=new SqlCommand("delete from Orders where OrderID='"+OrderID+"'",con); con.Open(); cmd.ExecuteNonQuery(); this.BindToDataGrid(); } private void dgSub_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem) { //鼠标悬停产生特殊效果,离开恢复 e.Item.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#6699ff'"); e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=c"); //取出第5个单元格(Cells[5])的第一个控件(Controls[0]) ((LinkButton)(e.Item.Cells[5].Controls[0])).Attributes.Add("onclick","return confirm('确认删除!');"); } } private void dgSub_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { this.dgSub.EditItemIndex=-1; this.BindToDataGrid(); } private void dgSub_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { this.dgSub.CurrentPageIndex=e.NewPageIndex; this.BindToDataGrid(); } private void dgSub_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { this.dgSub.EditItemIndex=e.Item.ItemIndex; this.BindToDataGrid(); } private void dgSub_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString(); string CustomerID=((TextBox)e.Item.Cells[1].Controls[0]).Text; string EmployeeID=((TextBox)e.Item.Cells[2].Controls[0]).Text; string OrderDate =((TextBox)e.Item.Cells[3].Controls[0]).Text; //错误原因是因为Northwind数据库不允许修改日期类型,如将日期类型改为{0:D},则执行出错! SqlConnection con=DB.createCon(); SqlCommand cmd=new SqlCommand("update Orders set OrderID='"+OrderID+"', CustomerID='"+CustomerID+"',EmployeeID='"+EmployeeID+"',OrderDate='"+OrderDate+"' where OrderID='"+OrderID+"'",con); con.Open(); cmd.ExecuteNonQuery(); this.dgSub.EditItemIndex=-1; this.BindToDataGrid(); } }} 数据库为:create database testGOuse testGOcreate table Employees(EmployeeID int primary key,LastName Nvarchar(20) not null,FirstName Nvarchar(10) not null,Title Nvarchar(30),TitleOfCourtesy Nvarchar(25),BirthDate datetime,HireDate datetime,)GOinsert into Employees values('1','Davolio','Nancy','Sales Representative','Ms.','1948-12-8','1992-5-1')insert into Employees values('2','Fuller','Andrew','Vice President, Sale','Dr.','1952-2-19','1992-8-14')insert into Employees values('3','Leverling','Janet','Sales Representative','Ms.','1963-8-30','1992-4-1')insert into Employees values('4','Peacock','Margaret','Sales Representative','Mrs.','1937-9-19','1993-5-3')GOcreate table Orders(OrderID int primary key ,CustomerID nchar(5) not null,EmployeeID int not null,OrderDate datetime not null)GOinsert into Orders values('1024','VINET','1','1996-7-4')insert into Orders values('1234','TOMSP','2','1996-7-4')insert into Orders values('2316','HANAR','3','1996-7-4')insert into Orders values('5673','OTTIK','4','1996-7-4')insert into Orders values('3487','HILAA','2','1996-7-4')insert into Orders values('2222','TOMSP','4','1996-7-4')insert into Orders values('3333','HILAA','3','1996-7-4')insert into Orders values('4444','HANAR','1','1996-7-4')insert into Orders values('5555','TOMSP','1','1996-7-4')insert into Orders values('6745','HANAR','4','1996-7-4')ASPX页:<form id="Form1" method="post" runat="server"> <FONT face="宋体">父表:<BR> </FONT> <asp:DataGrid id="dgPar" runat="server" BorderColor="White" BorderWidth="2px" BackColor="White" CellPadding="3" GridLines="None" AutoGenerateColumns="False" BorderStyle="Ridge" CellSpacing="1"> <FooterStyle Height="30px" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle> <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle> <ItemStyle Height="20px" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle> <HeaderStyle Font-Bold="True" Height="30px" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle> <Columns> <asp:ButtonColumn Text="选择" CommandName="Select"></asp:ButtonColumn> <asp:BoundColumn DataField="EmployeeID" HeaderText="EmployeeID"></asp:BoundColumn> <asp:BoundColumn DataField="LastName" HeaderText="LastName"></asp:BoundColumn> <asp:BoundColumn DataField="FirstName" HeaderText="FirstName"></asp:BoundColumn> <asp:BoundColumn DataField="Title" HeaderText="Title"></asp:BoundColumn> </Columns> <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle> </asp:DataGrid> <P><FONT face="宋体">子表:</FONT></P> <asp:DataGrid id="dgSub" runat="server" BorderColor="White" BorderWidth="2px" BackColor="White" CellPadding="3" GridLines="None" BorderStyle="Ridge" AutoGenerateColumns="False" CellSpacing="1"> <FooterStyle Height="30px" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle> <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle> <ItemStyle Height="20px" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle> <HeaderStyle Font-Bold="True" Height="30px" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle> <Columns> <asp:BoundColumn DataField="OrderID" HeaderText="OrderID"> <HeaderStyle Width="100px"></HeaderStyle> </asp:BoundColumn> <asp:BoundColumn DataField="CustomerID" HeaderText="CustomerID"> <HeaderStyle Width="100px"></HeaderStyle> </asp:BoundColumn> <asp:BoundColumn DataField="EmployeeID" HeaderText="EmployeeID"> <HeaderStyle Width="100px"></HeaderStyle> </asp:BoundColumn> <asp:BoundColumn DataField="OrderDate" HeaderText="OrderDate"> <HeaderStyle Width="100px"></HeaderStyle> </asp:BoundColumn> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn> <asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn> </Columns> <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle> </asp:DataGrid> </form> 没有设置DataGrid中的关键字段 pagecount要从新计算,删了一条记录集的数据产生了变化,索引就会超出范围页码会起变化,我当时是自己写的分页按钮,你可以下个分页的控件! asp.net sql 读写 text型数据 如何取得上传图片的英寸分辨率(不是图片的长和宽,是图片每英寸的像数一般为72,300等) 汉字乱码问题。 asp.net如何显示存储在数据库的二进制的word 网上考试系统的自动生成试题的问题,谁能解决一下.50分 求VS.NET MSDN2003下载地址 如何改变Form内的默认提交按钮 请问cs文件里面定义的变量,在aspx的HTML代码里面如何调用 asp.net 中控件 报错:重载“Directory”方法未获取“1”参数??请帮忙! @@@@@@@大家进来看一下呀,全是一样的操作,如何简化我的代码 很急的问题,应该不难
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;
using System.Data.SqlClient;
namespace DataGridTest
{
/// <summary>
/// ZhuCongTable 的摘要说明。
/// </summary>
public class ZhuCongTable : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgPar;
protected System.Web.UI.WebControls.DataGrid dgSub;
protected String ConnString = "Server=.;Uid=sa;Pwd=;Database=test"; private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
this.BindData();
// this.BindToDataGrid();
}
} private void BindData()
{
SqlDataAdapter adapter = new SqlDataAdapter("select * from Employees", ConnString);
DataTable dt = new DataTable();
adapter.Fill(dt);
dgPar.DataSource = dt;
dgPar.DataBind();
} // 获取子表数据并填充另外一个DataGrid
private void GetSubDataBind(string id)
{
string subQuery = "select * from Orders where EmployeeID=@EmployeeID";
SqlDataAdapter adapter = new SqlDataAdapter(subQuery, ConnString);
adapter.SelectCommand.Parameters.Add("@EmployeeID", SqlDbType.Int);
adapter.SelectCommand.Parameters["@EmployeeID"].Value = id;
DataTable dt = new DataTable();
adapter.Fill(dt);
dgSub.DataSource = dt;
dgSub.DataBind();
} private void BindToDataGrid()
{
SqlConnection con=DB.createCon();
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select * from Orders where EmployeeID=@EmployeeID", con);
DataSet ds=new DataSet();
sda.Fill(ds,"Orders");
this.dgSub.DataKeyField="OrderID";
this.dgSub.DataSource=ds.Tables["Orders"];
this.dgSub.DataBind();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.dgPar.SelectedIndexChanged += new System.EventHandler(this.dgPar_SelectedIndexChanged);
this.dgSub.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgSub_PageIndexChanged);
this.dgSub.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_CancelCommand);
this.dgSub.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_EditCommand);
this.dgSub.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_UpdateCommand);
this.dgSub.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgSub_DeleteCommand);
this.dgSub.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgSub_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void dgPar_SelectedIndexChanged(object sender, System.EventArgs e)
{
string id = dgPar.Items[dgPar.SelectedIndex].Cells[1].Text;
GetSubDataBind(id);
} private void dgSub_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//删除对应的列
string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString();
SqlConnection con=DB.createCon();
SqlCommand cmd=new SqlCommand("delete from Orders where OrderID='"+OrderID+"'",con);
con.Open();
cmd.ExecuteNonQuery();
this.BindToDataGrid();
} private void dgSub_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
//鼠标悬停产生特殊效果,离开恢复
e.Item.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#6699ff'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=c");
//取出第5个单元格(Cells[5])的第一个控件(Controls[0])
((LinkButton)(e.Item.Cells[5].Controls[0])).Attributes.Add("onclick","return confirm('确认删除!');");
}
} private void dgSub_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.dgSub.EditItemIndex=-1;
this.BindToDataGrid();
} private void dgSub_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this.dgSub.CurrentPageIndex=e.NewPageIndex;
this.BindToDataGrid();
} private void dgSub_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.dgSub.EditItemIndex=e.Item.ItemIndex;
this.BindToDataGrid();
} private void dgSub_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString();
string CustomerID=((TextBox)e.Item.Cells[1].Controls[0]).Text;
string EmployeeID=((TextBox)e.Item.Cells[2].Controls[0]).Text;
string OrderDate =((TextBox)e.Item.Cells[3].Controls[0]).Text;
//错误原因是因为Northwind数据库不允许修改日期类型,如将日期类型改为{0:D},则执行出错!
SqlConnection con=DB.createCon();
SqlCommand cmd=new SqlCommand("update Orders set OrderID='"+OrderID+"', CustomerID='"+CustomerID+"',EmployeeID='"+EmployeeID+"',OrderDate='"+OrderDate+"' where OrderID='"+OrderID+"'",con);
con.Open();
cmd.ExecuteNonQuery();
this.dgSub.EditItemIndex=-1;
this.BindToDataGrid();
}
}
}
create database test
GO
use test
GO
create table Employees
(
EmployeeID int primary key,
LastName Nvarchar(20) not null,
FirstName Nvarchar(10) not null,
Title Nvarchar(30),
TitleOfCourtesy Nvarchar(25),
BirthDate datetime,
HireDate datetime,
)
GO
insert into Employees values('1','Davolio','Nancy','Sales Representative','Ms.','1948-12-8','1992-5-1')
insert into Employees values('2','Fuller','Andrew','Vice President, Sale','Dr.','1952-2-19','1992-8-14')
insert into Employees values('3','Leverling','Janet','Sales Representative','Ms.','1963-8-30','1992-4-1')
insert into Employees values('4','Peacock','Margaret','Sales Representative','Mrs.','1937-9-19','1993-5-3')
GO
create table Orders
(
OrderID int primary key ,
CustomerID nchar(5) not null,
EmployeeID int not null,
OrderDate datetime not null
)
GO
insert into Orders values('1024','VINET','1','1996-7-4')
insert into Orders values('1234','TOMSP','2','1996-7-4')
insert into Orders values('2316','HANAR','3','1996-7-4')
insert into Orders values('5673','OTTIK','4','1996-7-4')
insert into Orders values('3487','HILAA','2','1996-7-4')
insert into Orders values('2222','TOMSP','4','1996-7-4')
insert into Orders values('3333','HILAA','3','1996-7-4')
insert into Orders values('4444','HANAR','1','1996-7-4')
insert into Orders values('5555','TOMSP','1','1996-7-4')
insert into Orders values('6745','HANAR','4','1996-7-4')
ASPX页:<form id="Form1" method="post" runat="server">
<FONT face="宋体">父表:<BR>
</FONT>
<asp:DataGrid id="dgPar" runat="server" BorderColor="White" BorderWidth="2px" BackColor="White"
CellPadding="3" GridLines="None" AutoGenerateColumns="False" BorderStyle="Ridge" CellSpacing="1">
<FooterStyle Height="30px" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
<ItemStyle Height="20px" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle Font-Bold="True" Height="30px" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
<Columns>
<asp:ButtonColumn Text="选择" CommandName="Select"></asp:ButtonColumn>
<asp:BoundColumn DataField="EmployeeID" HeaderText="EmployeeID"></asp:BoundColumn>
<asp:BoundColumn DataField="LastName" HeaderText="LastName"></asp:BoundColumn>
<asp:BoundColumn DataField="FirstName" HeaderText="FirstName"></asp:BoundColumn>
<asp:BoundColumn DataField="Title" HeaderText="Title"></asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle>
</asp:DataGrid>
<P><FONT face="宋体">子表:</FONT></P>
<asp:DataGrid id="dgSub" runat="server" BorderColor="White" BorderWidth="2px" BackColor="White"
CellPadding="3" GridLines="None" BorderStyle="Ridge" AutoGenerateColumns="False" CellSpacing="1">
<FooterStyle Height="30px" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
<ItemStyle Height="20px" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle Font-Bold="True" Height="30px" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="OrderID" HeaderText="OrderID">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CustomerID" HeaderText="CustomerID">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="EmployeeID" HeaderText="EmployeeID">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="OrderDate" HeaderText="OrderDate">
<HeaderStyle Width="100px"></HeaderStyle>
</asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle>
</asp:DataGrid>
</form>
页码会起变化,我当时是自己写的分页按钮,你可以下个分页的控件!