DataGrid的TemplateColumn里有一个CheckBox,我的问题是CheckBox似乎不能激发OnItemCommand事件,那么我怎么可以在CheckBox的Checked属性发生改变的时,知道发生变化的这个CheckBox时DataGrid中的哪一行的呢?也就是说,我要从CheckBox出发,找出它位于DataGrid中的那一行?希望高手帮帮忙,在线等!!谢谢!!

解决方案 »

  1.   

    两个方法:        /// <summary>
            /// 此方法适合绑定列,不适合数据表主键绑定了Label的情况.
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="controlID">checkBox控件ID</param>
            /// <param name="primaryKeyIndex">要获取数据表中列的索引</param>
            /// <returns></returns>
            public static ArrayList GetSelected(GridView grid, string controlID, int primaryKeyIndex)
            {
                ArrayList aryChecked = new ArrayList();
                for (int i = 0; i < grid.Rows.Count; i++)
                {
                    CheckBox chk = (CheckBox)grid.Rows[i].FindControl(controlID);
                    if (chk.Checked)
                        aryChecked.Add(grid.Rows[i].Cells[primaryKeyIndex].Text.ToString());
                }
                return aryChecked;
            }        /// <summary>
            /// 
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="checkBoxControlID"></param>
            /// <param name="primaryKeyControlID"></param>
            /// <returns></returns>
            public static ArrayList GetSelected(GridView grid, string checkBoxControlID, string primaryKeyControlID)
            {
                Label lbl_id = null;
                //
                ArrayList aryChecked = new ArrayList();
                for (int i = 0; i < grid.Rows.Count; i++)
                {
                    CheckBox chk = (CheckBox)grid.Rows[i].FindControl(checkBoxControlID);
                    if (chk.Checked)
                    {
                        if (grid.Rows[i].FindControl(primaryKeyControlID) is Label)
                        {
                            lbl_id = (Label)grid.Rows[i].FindControl(primaryKeyControlID);
                            aryChecked.Add(lbl_id.Text.Trim());
                        }
                    }
                }
                return aryChecked;
            }
      

  2.   

    前台:<asp:TemplateField HeaderText="请选择">
                                <ItemStyle HorizontalAlign="center" />
                                <HeaderTemplate>
                                    <input type="checkbox" id="chk_All" onclick="checkAll()" />
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <asp:CheckBox ID="chk_selected" runat="server" />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField Visible="False">
                                <ItemTemplate>
                                    <asp:Label ID="lbl_TeachCatalogID" Text='<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem,"teachCatalogID")) %>'
                                        runat="server"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
    后台:ArrayList selectRows = GetGridCheckColumn.GetSelected(grid_Course, "chk_selected", "lbl_TeachCatalogID");
      

  3.   

    哪位高手帮忙看一下问题:http://community.csdn.net/Expert/topic/5697/5697714.xml?temp=.216427,在控件板块那边好冷清.
      

  4.   

    ItemCommand事件里,循环所有的行,判断CheckBox是否选取,取着行的索引就可以了.
      

  5.   

    在 protected void myGrid_ItemCommand(object source, DataGridCommandEventArgs e)
    事件中写,应该就可以了,我也可以采用为CheckBox手工添加事件的方法
      

  6.   

    这个都是要遍历DataGrid的所有项的    protected void btnDelete_Click(object sender, EventArgs e)
        {
            CheckBox chk;
            foreach (DataGridItem dgi in DataGrid1.Items)
            {
                chk = (CheckBox)dgi.FindControl("chkSelect");
                if (chk != null)
                {
                    if (chk.Checked)
                    {
                       
                     //可以使用DataGrid1.DataKeys[dgi.ItemIndex].ToString()得到当前主键值
                      
                    }
                }
            }
        }