你的delete button是DATAGRID里每行都有还是只有一个?如果是后者,这么做
<form runat="server">
<input type="hidden" id="SelectedRow" value="-1" runat="Server" />
...
</form>....e.Item.Attributes["onclick"]="document.all('SelectedRow').value="+e.Item.ItemIndex.ToString ()+"; SetuserValue('"+e.Item.Cells[0].Text+"');if (obj == this) return; if (obj != null) obj.style.backgroundColor = ''; this.style.backgroundColor='#cccccc'; obj=this;";
....private void delete_Click(object sender, System.EventArgs e)
{
 if (!isEditing) 
 {
      int SelectedIndex = Convert.ToInt32(SelectedRow.Value);
    
      if (SelectedIndex<=0)
      {
 Message.Text="请先选择要删除的!";
 return;
       }      string keyValue = (string)DataGrid1.DataKeys[SelectedIndex];      .....
    //重要!
    SelectedRow.Value = "-1";

解决方案 »

  1.   

    下面只是个示范<%@ Page language="C#"%>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <html><head>
    <script language="javascript">
    var obj;</script>
    <script runat="server">
    void Page_Load(Object sender, EventArgs e) 
    {   
        if(!IsPostBack)                    
        {
    SqlDataAdapter da = new SqlDataAdapter("select * from authors",
    "Server=localhost;Database=pubs;UID=sa;PWD=;");
    DataSet ds = new DataSet();
    da.Fill(ds,"authors");
    DataGrid1.DataSource = ds.Tables["authors"].DefaultView;
    DataGrid1.DataBind();//Response.Write("****" + ((Table)DataGrid1.Controls[0]).Rows.Count.ToString() + "****");
    }
                
    }public void ItemCreated(Object sender, DataGridItemEventArgs e)
    {
    ListItemType itemType = e.Item.ItemType;
    if (itemType == ListItemType.Item || itemType == ListItemType.AlternatingItem) 
    { e.Item.Attributes["onclick"]="document.all('SelectedRow').value="+e.Item.ItemIndex.ToString ()+"; if (obj == this) return; if (obj != null) obj.style.backgroundColor = ''; this.style.backgroundColor='#cccccc'; obj=this;"; e.Item.Attributes["onmouseover"]="javascript:this.bgColor='#FFDDAA'";
    e.Item.Attributes["onmouseout"]="javascript:this.bgColor='#FFFFF5'";
    }
    }private void delete_Click(object sender, System.EventArgs e)
    {
    int SelectedIndex = Convert.ToInt32(SelectedRow.Value);       if (SelectedIndex <0)
           {
      Message.Text="请先选择要删除的!";
      return;
            } //在这里做你的数据库处理,重新绑定什么的,下面只是个示范,别用在你的编码里
    Message.Text= "";
    ((Table)DataGrid1.Controls[0]).Rows.RemoveAt(SelectedIndex+1);

    SelectedRow.Value = "-1";
    }</script>
    <form runat="server">
          <input type="hidden" id="SelectedRow" value="-1" runat="Server" />
          <asp:Label id="Message" runat="server" />
          <asp:Button id="delete_Btn" runat="server" Text="Delete" onclick="delete_Click"/>
          <asp:DataGrid id="DataGrid1" runat="server"     
               OnItemCreated="ItemCreated" AutoGenerateColumns="false">
             <Columns>
                <asp:BoundColumn HeaderText="Last Name" 
                     ReadOnly="true" 
                     DataField="au_lname"/>            <asp:BoundColumn HeaderText="ID" 
                     ReadOnly="true" 
                     DataField="au_id"/>
             </Columns>
          </asp:DataGrid>
    <asp:Button id="btn" runat="Server" text="submit" />
    </form>