如下代码,一个删除按扭事件通过被选择的行的ID删除所选中的行,((CheckBox)dr.FindControl("xuanze")).Checked 能取到'xuanze'列的值,为何用注掉的string ID 。。 ,不能取到列‘Label1’的值,未注销的string ID = GridView1.DataKeys[1].Values[0].ToString();有个不能全部删除的问题,索引越界了。
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        Users user = new Users(); //创建Users对象      
        foreach (GridViewRow dr in GridView1.Rows)//对GridView中每行进行判断
        {
            if (((CheckBox)dr.FindControl("xuanze")).Checked)//如果该行复选按钮选择则删除
            {
                string ID = GridView1.DataKeys[1].Values[0].ToString();
               // string ID = ((Label)dr.FindControl("Label1")).Text;//取出主键
                   user.UserID = ID;
                user.DeleteByProc(ID);//调用Users类DeleteByProc方法删除用户
            }
            InitData();
        }
    }
gridview 如下:<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="UserID" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" Width="100%" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
                    <Columns>
                        <asp:TemplateField HeaderText="选择">
                                <ItemTemplate>
                                    <ASP:CHECKBOX ID="xuanze" runat="server"></ASP:CHECKBOX>
                                </ItemTemplate>
                            </asp:TemplateField>
                        <asp:TemplateField HeaderText="用户编号">
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server"><%# Eval("UserID") %></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="用户姓名">
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("UserName") %>' Width="60"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label2" runat="server"><%# Eval("UserName") %></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="权限">
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtPower" runat="server" Text='<%# Eval("UserPower") %>' Width="60"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server"><%# Eval("UserPower") %></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>                        
                        <asp:CommandField HeaderText="编辑" ShowEditButton="True" />
                        <asp:CommandField ShowDeleteButton="True" HeaderText="删除" />
                    </Columns>

解决方案 »

  1.   

     string ID = ((Label)dr.Cells[列号].FindControl("Label1")).Text;//取出主键 
    试试
      

  2.   

    // string ID = ((Label)dr.FindControl("Label1")).Text;//取出主键 带//的,
      

  3.   

    这好象不可能!!gridView显示了这ID吗??
      

  4.   

    那改成这个试试
     <asp:Label ID="Label1" runat="server" text='<%# Eval("UserID") %>'></asp:Label> 
      

  5.   

    你可以换种写法:
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                string ID = ((Label)GridView1.Rows[i].FindControl("Label1")).Text;
                Response.Write(ID);
            }
    但你要看清GridView不是在编辑状态下!!
      

  6.   

    楼上有点小错,应该是:
    string ID = ((Label)GridView1.Rows[i].Cells[列].FindControl("Label1")).Text; 
      

  7.   

    string ID = GridView1.DataKeys[1].Values[0].ToString(); 
    楼主是问这样为什么取不到ID是吗?
    你用GridView1.DataKeys["ID"].Values[0].ToString();这样试试
      

  8.   


    原来如此,是这个问题,我用 string ID = ((Label)dr.FindControl("Label1")).Text;// 取出Label1的text,text没有赋值就是空了,这样看这很明白,谢谢。