在gridview中嵌套一个imagebutton按钮,当点击按钮的时候怎样获取该行的主键值
请各位尽量讲述的详细一些,最好附带示例代码
谢谢

解决方案 »

  1.   

    <asp:GridView ID="grdvItem" runat="server" BorderWidth="1px" CellPadding="0" AutoGenerateColumns="False" Width="100%"    OnRowDeleting="grdvItem_RowDeleting">
                                    <Columns>
                                        <asp:BoundField DataField="ITEMID" HeaderText="编号" ReadOnly="True">
                                            <ItemStyle HorizontalAlign="Center" />
                                            <HeaderStyle HorizontalAlign="Center" Width="5%" />
                                        </asp:BoundField>
                                        <asp:BoundField DataField="ITEMNAME" HeaderText="栏目名称">
                                            <ItemStyle HorizontalAlign="Center" />
                                            <HeaderStyle HorizontalAlign="Center" Width="20%" />
                                        </asp:BoundField>
                                        <asp:BoundField DataField="ITEMDESC" HeaderText="栏目描述">
                                            <ItemStyle HorizontalAlign="Left" />
                                            <HeaderStyle HorizontalAlign="Center" Width="40%" />
                                        </asp:BoundField>
                                        <asp:BoundField DataField="ITEMORDER" HeaderText="栏目顺序">
                                            <ItemStyle HorizontalAlign="Center" />
                                            <HeaderStyle HorizontalAlign="Center" Width="10%" />
                                        </asp:BoundField>
                                        
                                        <asp:CommandField HeaderText="删除" ShowDeleteButton="True" DeleteImageUrl="image/icon_del.gif" DeleteText="&lt;img src='image/icon_del.gif' border='0' alt='删除' /&gt;">
                                            <ItemStyle HorizontalAlign="Center" />
                                            <HeaderStyle Width="10%" />
                                        </asp:CommandField>
                                    </Columns>
                                    
                                    <RowStyle Height="25px" />
                                </asp:GridView>
     protected void grdvItem_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                if (DeleteNewsItem(Convert.ToInt32(grdvItem.Rows[e.RowIndex].Cells[0].Text)) == 1)
                {
                    // 添加操作成功后进行操作的代码
                }
                else
                {
                    Response.Write("<script>alert('保存失败!\\n请确认填写信息后重新提交。');</script>");
                }
            }
            catch (Exception)
            {
                Response.Write("<script>alert('保存失败!\\n请确认填写信息后重新提交。');</script>");
            }
            InitNewsItemList();
            grdvItem.DataBind();
        }
      

  2.   

    没有看明白可不可以讲一个imagebutton的例子
      

  3.   

     <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" DataKeyNames="id">
                <Columns>
                    <asp:TemplateField>
                    <ItemTemplate>
                    <asp:ImageButton ID="ibtndddd" runat="server" CommandName="dd" CommandArgument ="<%#  GridView1.Rows.Count %>" />
                    </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView> protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "dd")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                string CID = GridView1.DataKeys[index].Value.ToString();        
            }
        }
      

  4.   

    <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" DataKeyNames="id"> 
        <Columns> 
            <asp:TemplateField> 
                <ItemTemplate> 
                    <asp:ImageButton ID="ibtnOK" runat="server" CommandName="OK"  /> 
                </ItemTemplate> 
            </asp:TemplateField> 
        </Columns> 
    </asp:GridView> protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "OK")
        {
            int index = ((GridViewRow)((ImageButton)e.CommandSource).NamingContainer).RowIndex;        //通过下面的方式找到当前行主键
            string id = GridView1.DataKeys[index].Value.ToString();        //然后做你的数据库操作
        }
    }
      

  5.   

    5楼的请教个问题好不
    ((GridViewRow)((ImageButton)e.CommandSource).NamingContainer).RowIndex;这句话中e.CommandSource应该能定位到按钮吧,然后e.CommandSource).NamingContainer应该是定位到行吧(定位到cells应该是错误的吧),
      

  6.   

    e.CommandSource 找到命令源因为命令源事实上是个ImageButton,所以将其转化为ImageButton((ImageButton)e.CommandSource).NamingContainer 找到ImageButton的命名容器,这个容器不是一个Cell,而是一个GridViewRow,也就是说不是一个单元格,而是一行再将此命名容器转化为GridViewRow后取其索引
      

  7.   

    贴你的代码据我分析猜测,你在Page_Load绑定数据是没有判断回传    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            { 
                //绑定GridView
            }
        }
      

  8.   

    如果命名容器是一行的话,行与行之间的cell里也有同名的控件,像如果模板列中加入了个button,不就是这样吗?
      

  9.   

    在imagebutton点击事件中:       GridViewRow Row=((ImageButton)sender).NamingContainer as GridViewRow;
            string id = GridView1.DataKeys[Row.RowIndex].Value.ToString();
      

  10.   

    你可以定个LABLE控件绑定那个button按钮,读取那个LABLE的值就可以了哦。
      

  11.   

     public void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            GridViewRow currentRow = ((CheckBox)sender).Parent.Parent as GridViewRow;        // 选中的行
            Session["bid"] = currentRow.RowIndex + 1;        if (currentRow.RowIndex + 1 > 0)
            {
                int count = 0;
                // 获取主键编号
                foreach (GridViewRow row in GridView1.Rows)
                {
                    CheckBox cb = (CheckBox)row.FindControl("CheckBox1");                if (cb != null && cb.Checked)
                    {
                        this.masid = Convert.ToString(GridView1.DataKeys[row.RowIndex].Value);
                        Session["masid"] = this.masid;                    GridView1.SelectedIndex = row.RowIndex;
                    }
                }
    }
    这是我在gridview中嵌套checkbox是获取选中行的主键的方法,我认为这和我现在嵌套imagebutton去选中行的原理应该是一样的,可是现在问题是我怎么都取不到呀!!!郁闷!
    每次取到的值都是0