AutoGenerateColumns="False" 时好像DataKeyNames="编号" 不管用了吧,只能代码来操作,

解决方案 »

  1.   

    this.GridView1.DataKeys[e.RowIndex].Value.ToString()
    是主键的值
    是在this.GridView1.DataKeyNames = new string[] { "id" };中的
    再次绑定后这个条件和你以前的条件不一样了
      

  2.   

    你对索引列的理解不对,也就是说不应该“根据this.GridView1.DataKeys[e.RowIndex].Value.ToString()来删除"
      

  3.   

    this.GridView1.Rows[e.RowIndex].Cells[索引].Text;
    索引是这列<asp:BoundField DataField="编号" HeaderText="编号" SortExpression="编号"  />的列索引
      

  4.   

    参考:http://topic.csdn.net/u/20080330/20/494bfae3-26af-44f8-a398-d4d9c9043797.html(1)如果这个字段显示在页面的话,GridView1.DataKeys[e.RowIndex].Value.ToString() 可以用GridView1.Rows[e.RowIndex].Cells[列索引].Text替换。 
    (2)如果该字段的列示是隐藏的话,你首先应该明确一点,GridView中的主键可以比数据库中的主键多,完全可以在GridView中将本列加入到主键中,GridView1.DataKeys[e.RowIndex].Value.ToString()可以用GridView1.DataKeys[e.RowIndex].Values["列名"].ToString()替换 
    (3)如果不显示又不想用(2)的方法,则可以建一个模板列,里面增加一个HiddenField保留这个列的值,呵呵,安全性差些。