总体的功能是通过一个datagrid来显示记录的几个字段,通过点击datagrid里的记录来在另外的文件框中显示出记录的全部字段内容,datagrid的第一列是删除列,是这样实现的
public void dgrd1_ItemCreated(object s,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
case ListItemType.EditItem:
TableCell myTableCell;
myTableCell = e.Item.Cells[0];
LinkButton myDeleteButton ;
myDeleteButton = (LinkButton)myTableCell.Controls[0];
myDeleteButton.Attributes.Add("onclick","javascript:return window.confirm('确定删除吗?');");
myDeleteButton.Text = "删除";
break;
}
}
另外有一个模版列,实现点击后把当前记录的内容显示在文本框内
public void dgrd1_ItemCommand(object s,DataGridCommandEventArgs e)
{
string strId; strId = dgrd1.DataKeys[e.Item.ItemIndex].ToString();
dgrd1.SelectedIndex = e.Item.ItemIndex;

Session["flag"] = "";
if (e.CommandName!="Delete")
{
txtId.ReadOnly=true;
BindDetail(strId);
}
}
现在出现一个这样的问题
当我第一次选择一条记录时,显示正常,接着选另外一条记录的时候,datagrid里面前一次选择的记录那行的删除列没有了
请问这是什么原因造成的,请教解决的方法

解决方案 »

  1.   

    不是每点击一次就执行了itemcommand里面的代码了吗?那他的index不就是当前记录的吗
    indexchange要写在哪里?写些什么内容
      

  2.   

    你的删除代码在哪呢?你可以调试一下看看,好像不是不管你点击模板列也好还是点击那个删除或编辑列也好都会执行dgrd1_ItemCommand函数,很有可能你在点显示详细的时候已经把记录删除了!你单步调试一下看看!到底执行了什么语句导致的结果!
      

  3.   

    fisher12345(fisher)
    我已经在itemcommand里面判断了,如果点的时删除就不会执行显示的代码,删除的代码都没有问题
    以下是删除的代码
    public void dgrd1_Delete(object s,DataGridCommandEventArgs e)
    {

    string strId;
    SqlCommand cmmDel;
    string strDel; strId = dgrd1.DataKeys[e.Item.ItemIndex].ToString();
    dgrd1.SelectedIndex = e.Item.ItemIndex; strDel = "delete authors where au_id = @strId";
    cmmDel = new SqlCommand(strDel,conn);
    cmmDel.Parameters.Add("@strId",strId); conn.Open();
    cmmDel.ExecuteNonQuery();
    conn.Close();
    Binddgrd1();
    }
      

  4.   

    前面看错你的意思了!
    我想问题可能出在datagrid几个事件执行顺序的问题,你试着在几个事件中都设个断点一步步调试一下看看,我觉得这个应该不是那么复杂的!
      

  5.   

    另外,你在设置dg删除列时没有写上“删除”两个字吗?这两个字好像是在ItemCreated事件里写的,我这里简单试了下没问题的!我猜想你要是把所有行都点一遍估计你那一列的“删除”都会看不见!