急!几天的问题还没解决?
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();
}