急!几天的问题还没解决?

zjzhz 2003-05-17 12:29:17
一个管理页面,其中用到了datagrid的删除功能,在进入首页时,点击标题旁边的“删除”能删除相应的标题,但是翻页后(如在第2页),再次点击第二条标题旁边的“删除”,这时却出现删除了第一页的第二条标题记录,而第2页的相应记录并没有删除,当删除其他页的第3条记录时结果也删除了第一页的第3条记录,为什么翻业页后MyList.DataKeys[(int)e.Item.ItemIndex]这个值总是对应第一页的id值,烦各位高手指点一下,cs 代码如下

DataView CreateDataSource()
{
SqlConnection myConnection = new

SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlDataAdapter myCommand = new SqlDataAdapter("select * from zl",

myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "zl");
return ds.Tables["zl"].DefaultView;
}

public override void DataBind()
{
DataView source=CreateDataSource();
if(!IsPostBack)
{

RecordCount=source.Count;
PageCount=RecordCount/MyList.PageSize;
if((RecordCount%MyList.PageSize)!=0) PageCount++;
lblRecordCount.Text=RecordCount.ToString();
lblPageCount.Text=PageCount.ToString();
lblCurrentPage.Text="1";
}
MyList.DataSource = source;

}

public void MyList_Page(Object sender, DataGridPageChangedEventArgs e)
{
//由内置页导航使用。CurrentPageIndex 已设置
MyList.CurrentPageIndex = e.NewPageIndex;
DataBind();
}

public void txtIndex_Changed(Object sender, EventArgs e)
{

btnFirst.Enabled=true;
btnPrev.Enabled=true;
btnNext.Enabled=true;
btnLast.Enabled=true;

int index=Int32.Parse(txtIndex.Text.ToString());
PageCount=Int32.Parse(lblPageCount.Text.ToString());
if(index>=1&&index<=PageCount)
{
MyList.CurrentPageIndex=index-1;
DataBind();
lblCurrentPage.Text=index.ToString();

if(index==1)
{
btnFirst.Enabled=false;
btnPrev.Enabled=false;
}
else if(index==PageCount)
{
btnLast.Enabled=false;
btnNext.Enabled=false;
}


else

{ txtIndex.Text=""; }
MyList.DataBind();
}
}

public void PagerButtonClick(Object sender, CommandEventArgs e)
{
btnFirst.Enabled=true;
btnPrev.Enabled=true;
btnNext.Enabled=true;
btnLast.Enabled=true;

//由外部分页 UI 使用
String arg = e.CommandArgument.ToString();

PageCount=Int32.Parse(lblPageCount.Text.ToString());
int pageindex=Int32.Parse(lblCurrentPage.Text.ToString())-1;

switch(arg)
{
case "Next":
if (pageindex < (PageCount - 1))
pageindex ++;
break;
case "Prev":
if (pageindex > 0)
pageindex --;
break;
case "Last":
pageindex = (PageCount - 1);
break;
case "First":
pageindex=0;
break;
}
if(pageindex==0)
{
btnFirst.Enabled=false;
btnPrev.Enabled=false;
}
else if(pageindex==PageCount-1)
{
btnLast.Enabled=false;
btnNext.Enabled=false;
}
MyList.CurrentPageIndex=pageindex;
DataBind();
lblCurrentPage.Text=(MyList.CurrentPageIndex+1).ToString();

}



public void MyDataGrid_Delete(Object sender, DataGridCommandEventArgs e)
{
SqlConnection myConnection = new

SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
String deleteCmd = "DELETE from zl where id = @Id";
SqlCommand myCommand = new SqlCommand(deleteCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.Char, 11));
myCommand.Parameters["@Id"].Value =

MyList.DataKeys[(int)e.Item.ItemIndex];

myCommand.Connection.Open();

try
{
myCommand.ExecuteNonQuery();

}
catch (SqlException)
{

}

myCommand.Connection.Close();

DataBind();
}
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wd_318 2003-05-17
  • 打赏
  • 举报
回复
你试的时候请先往authors表中写几条记录,
因为它原有的记录因为表间有关联,删除时会提示出错的。
wd_318 2003-05-17
  • 打赏
  • 举报
回复
下面程序我试过的,你看看吧,希望能有所帮助:

<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Collections" %>
<script runat="server">

void Page_Load(object sender, EventArgs e) {

// TODO: Update the ConnectionString and CommandText values for your application

show.VirtualItemCount=2000;
show.DataSource=CreateDataSource();
show.DataBind();
}



ICollection CreateDataSource()
{
SqlConnection objConnection;
SqlDataAdapter objCommand;
string strConnect="server=(local);database=pubs;trusted_connection=true";
string strCommand="select au_id as [au_id], au_lname as [Last Name], au_fname as [First Name], Address, City, State from Authors";
DataSet DataSet1=new DataSet();

objConnection=new SqlConnection(strConnect);
objCommand=new SqlDataAdapter(strCommand,objConnection);
objCommand.Fill(DataSet1,"person");

DataView dv =new DataView(DataSet1.Tables[0]);
return dv;
}

void show_PageIndexChanged(Object source, DataGridPageChangedEventArgs e)
{
show.CurrentPageIndex = e.NewPageIndex;
show.DataSource=CreateDataSource();
show.DataBind();
}

void show_DeleteCommand(Object source, DataGridCommandEventArgs e) {
SqlConnection myConnection = new SqlConnection("server=(local);database=pubs;trusted_connection=true");
String deleteCmd = "DELETE from Authors where au_id = @au_id";

SqlCommand myCommand = new SqlCommand(deleteCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@au_id", SqlDbType.NVarChar, 11));
myCommand.Parameters["@au_id"].Value = show.DataKeys[(int)e.Item.ItemIndex];

myCommand.Connection.Open();

try
{
myCommand.ExecuteNonQuery();
TextBox1.Text="正确";
}
catch (SqlException)
{
TextBox1.Text="错误";
}

myCommand.Connection.Close();

show.DataSource=CreateDataSource();
show.DataBind();
}

</script>
<html>
<head>
</head>
<body style="FONT-FAMILY: arial">
<h2>Simple Data Report
</h2>
<hr size="1" />
<form runat="server">
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:DataGrid id="show" style="Z-INDEX: 101; LEFT: 15px; POSITION: absolute; TOP: 121px" runat="server" DataKeyField="au_id" OnDeleteCommand="show_DeleteCommand" OnPageIndexChanged="show_PageIndexChanged" Height="281px" Width="689px" PageSize="5" AllowPaging="True">
<PagerStyle nextpagetext="下页" prevpagetext="上页"></PagerStyle>
<Columns>
<asp:ButtonColumn Text="<div id=de onclick="javascript:return confirm('是否删除...');">删除</div>" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
<br />
</form>
</body>
</html>

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧