点击 asdf 这行"编辑" 怎么 获取cccc的主键值? 我的相关代码 
   在 父Gridview 那个事件下 获取主键值 给 Index;
  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
       Index = Convert.ToInt16(e.CommandArgument.ToString());//我这样写不行我在 前台怎么给  CommandArgument赋值?
                 Response.Write(e.CommandArgument.ToString().Length);//结果是 :0
                   
    }  protected void ClassChild_RowEditing(object sender, GridViewEditEventArgs e)
    { GridView ClassChild = (GridView)sender;
        ClassChild.EditIndex = e.NewEditIndex;
        BindChild(ClassChild); }
    protected void BindChild(GridView gv)
    {
          gv.DataSource = Bll.GetList("SD_class.SD_ParentId =" + Convert.ToInt16(GridView1.DataKeys[Index].Values[0]) + "and SD_class.SD_Level=2"); //现在报错的地方就是 这个 "Index";
        gv.DataBind();
    }  
 private int Index
    {
        get
        {
            if (ViewState["Index"] != null && ViewState["Index"].ToString() != "")
            {
                return Convert.ToInt32(ViewState["Index"]);
            }
            else
            {
                return -1;
            }
        }
        set
        {
            ViewState["Index"] = value;
        }
    }
  
这是 中间一个模板列的内容
    <asp:TemplateField HeaderText="删除" ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"  CommandArgument='<%# Eval("SD_ClassId") %>' CommandName="Delete"
                    Text="删除"></asp:LinkButton>
            </ItemTemplate>
            
                <FooterTemplate>
                           <asp:LinkButton ID="AddClass" runat="server" CausesValidation="False"  CommandName="AddClass"
                    Text="添加栏目"></asp:LinkButton>
                    </FooterTemplate>
        </asp:TemplateField>
弄了好长时间 没弄成  谢谢 各位了.
上一贴地址 上一贴地址

解决方案 »

  1.   


      protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
           if(e.CommandName == "Delete")
    {
           Index = Convert.ToInt16(e.CommandArgument.ToString());//我这样写不行我在 前台怎么给  CommandArgument赋值?
                     Response.Write(e.CommandArgument.ToString().Length);//结果是 :0
    }
                       
        }
      

  2.   

    To:migercai   这里关键是  index =-1;
      

  3.   

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            Index = Convert.ToInt16(e.CommandArgument.ToString());//
                             
        }
      

  4.   

    不好意思,看来是取不到那个index,请看看这个怎么去外层datagrid的行序数
    http://www.cnblogs.com/oomusou/archive/2007/06/26/796094.html
      

  5.   

     protected void ParentGridView_RowEditing(object sender, GridViewEditEventArgs e)
        {
            int parent_index = e.NewEditIndex;
            ParentGridView.EditIndex = parent_index;
            bindParent();
            Session["sCategoryID"] =Convert.ToInt32(ParentGridView.DataKeys[parent_index].Value);
            Session["sParentGridViewIndex"] = parent_index;
        }
    \
      

  6.   

    protected void ChildGridView_OnRowEditing(object sender, GridViewEditEventArgs e)
        {
            int parent_index = (int)Session["sParentGridViewIndex"];
            GridViewRow parent_row = ParentGridView.Rows[parent_index];
            GridView ChildGridView = (GridView)parent_row.FindControl("ChildGridView");
            int child_index = e.NewEditIndex;
            ChildGridView.EditIndex = child_index;
            Session["sProductID"] = Convert.ToInt32(ChildGridView.DataKeys[child_index].Value);
        }
      

  7.   

    假如这样赋值的话CommandArgument='<%# DataBinder.Eval(Container,"RowIndex") %>' 
    那么后台就可以按你那样取值了
      

  8.   

    这样的话你就可以在你的内层gridview的rowcommand事件填写如下代码
    if(e.CommandName == "Delete")
    {
       string parentid = GridView1.DataKeys[Index].Value.ToString();
       删除后绑定
    }
      

  9.   

     protected void ClassChild_RowEditing(object sender, GridViewEditEventArgs e)
        { GridView ClassChild = (GridView)sender;
            ClassChild.EditIndex = e.NewEditIndex;
            BindChild(ClassChild); 
            // 
            GridViewRow parentRow = (GridViewRow)ClassChild.BindingContainer;
            object parentKey = GridView1.DataKeys[parentRow.RowIndex].Value;

    }
      

  10.   

    CommandArgument=' <%# DataBinder.Eval(Container,"RowIndex") %>' 
      

  11.   

    1. 用 CommandArgument 去存 DataKey 或者 RowIndex 都是没必要的,当然没有错,
       本身控件层次足够你回溯到任何父级控件属性2. 一定要善用 Control_Event(object sender ...) 中的 sender 以及 Control.NamingContainer 和 Control.BindingContainer 属性3. ASP.NET DEMO 5:如何在GridView的RowCommand事件中获取当前的GridViewRow
      

  12.   

    1. 用 CommandArgument 去存 DataKey 或者 RowIndex 都是没必要的,当然没有错, 
      本身控件层次足够你回溯到任何父级控件属性 2. 一定要善用 Control_Event(object sender ...) 中的 sender 以及 Control.NamingContainer 和 Control.BindingContainer 属性 3. ASP.NET DEMO 5:如何在GridView的RowCommand事件中获取当前的GridViewRow
    ----------------------
    学习学习
      

  13.   

    非常感谢两位的帮助jimu8130 Jinglecat .
      

  14.   

     我是要获取 父gridView 里面的 的ID  ..