既然是自动生成,为什么不在SELECT的时候把要用的字段列出来呢?
我也碰到这种情况,不过没问了,也没翻书,最后就是改改SELECT了.

解决方案 »

  1.   

    问题是选择的时候那些列是自动生成的,只能select * from table
      

  2.   

    在DataKeyNames属性里把ID加进去就可以了,有很多方法。
    (1)把OldParametersValueFormat设置成@original_{0},加入删除命令,Delete From xx where id=@original_ID。
    (2)通过GridView1.DataKeys[i]得到id
      

  3.   

    循环找到你要删的列的index
    然后GridView1.Columns.removeAt(index)就行了
      

  4.   

    隐藏列的方法
    private void gridview1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Header)
    {
    TableCell cell = e.Item.Cells[19];
    cell.Style.Add("display","none");

    }
    }
      

  5.   

    都不行,自动生成列是找不到e.Item.Cells[19]的
      

  6.   

    把gridview中的Autogeneratecol设置成false
    在属性columns中添加列,再把列的datafild属性设置成你要显示的字段名.如:
    "select userid,username from mytabel",把列属性datafild的值没置成“userid”或“username”
    这样就可能对每一列操作了
      

  7.   

    别人就是要自动创建列, 楼上还要Autogeneratecol设置成false
    那只有在绑定后做文章了,绑定后循环表格的每列,试下
      

  8.   

    onrowdatabound:       protected void yourGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                nIndex = 0;
                foreach (TableCell cell in e.Row.Cells)
                {
                    if (cell.Text == "NameofFieldWhichShouldNotBeShown")
                    {
                        cell.Visible = false;
                        break;
                    }
                    nIndex++;
                }
            }
            else
            {
                TableCell cell = e.Row.Cells[nIndex];
                cell.Visible = false;
            }
        }
      

  9.   

    如果多个列的话,那就nIndex改成数组,对应的薄记每个列的位置。上面隐藏单个的写了代码试了一下没问题。
    不过这种在Control上的筛选真的是很无奈中的办法。
      

  10.   

    把datakeyName设成关键字ID,直接通过关键字读ID就可以了,至于那个删除列,可以用模板列啊,Gridview可以有模板列和动态生成列组合。
      

  11.   

    在RowDataBound事件里可以实现隐藏
      

  12.   

    可以设置这个列的样式来控制,也可以把不需要显示出来的字段,放到datakeys里边
      

  13.   

            //表头隐掉
            GridView1.HeaderRow.Cells[ddlColumns.SelectedIndex].Visible = isVisible;
            //数据隐掉
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridView1.Rows[i].Cells[ddlColumns.SelectedIndex].Visible = isVisible;
            }
      

  14.   

    兄弟,,他们都不懂你。。我懂你在服务器端不能隐藏的。
    因为自动绑定数据后。
    GridView.Columns.Count = 0;所以怎么整都是卵的。
    可以在客户端通过js隐藏掉
    你把Id放在最前面。。
    添加    $(document).ready(function(){
          
            $("#<%=gv.ClientID %>").find("tr").find("td:eq(0),th:eq(0)").hide();
        });
      

  15.   

    lstcyzj说得很对。不过如果找不到的话,可以用以下方式:
    $(document).ready(function(){      
        $("[id$=gvID]")find("tr").find("td:eq(0),th:eq(0)").hide();
    });