我自己写了一个DataGrid主从表,单独对子表编辑删除操作没有问题,但是联动主表后对从表的编辑删除操作就有问题了!大家帮帮忙看看,谢谢啦!数据库为:
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>
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>
解决方案 »
- 缓存项问题
- 怎么在点击后退时自动刷新页面啊???
- 很奇怪的问题,通过标题说不清楚
- 在ajax中如何操作数据库不出现乱码
- 有没有办法让<iframe>的横向滚动条消失,但要保留竖向滚动条?
- 两个问题
- 根据一个数字串的内容,给相应的checkbox勾上对号,请大家帮忙
- INSERT 语句与 FOREIGN KEY 约束"FK_Tripinformation_circuit"冲突。该冲突发生于数据库"jiechuwang",表"
- 无法加载 DLL (oci.dll)。 这是什么错误?大家快帮帮我
- 原来的recordset 对象在vb.net还有吗?
- 请教孟子E章,缩略图的问题
- 大家做C# asp.net页面用什么工具呀~~~~~~~~!!!
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();
}
}
}
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误:
行 101: {
行 102: //删除对应的列
行 103: string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString();
行 104: SqlConnection con=DB.createCon();
行 105: SqlCommand cmd=new SqlCommand("delete from Orders where OrderID='"+OrderID+"'",con);
源文件: c:\inetpub\wwwroot\datagridtest\zhucongtable.aspx.cs 行: 103
编辑操作错误:Must declare the variable '@EmployeeID'.
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: Must declare the variable '@EmployeeID'.源错误:
行 58: sda.SelectCommand=new SqlCommand("select * from Orders where EmployeeID=@EmployeeID", con);
行 59: DataSet ds=new DataSet();
行 60: sda.Fill(ds,"Orders");
行 61: this.dgSub.DataKeyField="OrderID";
行 62: this.dgSub.DataSource=ds.Tables["Orders"];
源文件: c:\inetpub\wwwroot\datagridtest\zhucongtable.aspx.cs 行: 60
string OrderID=this.dgSub.DataKeys[e.Item.ItemIndex].ToString();