C# 从asp GridView和Datatable中删除行

C# 从asp GridView和Datatable中删除行,c#,asp.net,gridview,datatable,viewstate,C#,Asp.net,Gridview,Datatable,Viewstate,我有一个asp gridview,它与一个datatable绑定。只有一个选中的模板列与源数据表列(sel)绑定 以下是标记示例: <asp:GridView ID="testGrid" CssClass="ObjSelection" AutoGenerateColumns="false" OnRowDataBound="testGrid_RowDataBound"

我有一个asp gridview,它与一个datatable绑定。只有一个选中的模板列与源数据表列(
sel
)绑定

以下是标记示例:

<asp:GridView  ID="testGrid"  
                CssClass="ObjSelection" 
                AutoGenerateColumns="false" 
                OnRowDataBound="testGrid_RowDataBound"
                runat="server">
 <Columns>
     <asp:TemplateField HeaderText="&nbsp">
        <HeaderTemplate>
           <asp:CheckBox ID="chkAll" runat="server" Enabled="true" AutoPostBack="true" />
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox AutoPostBack="true" ID="chkRow" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "sel")%>' OnCheckedChanged="ChkRow_OnCheckChange" />
        </ItemTemplate>
     </asp:TemplateField>                                   

 </Columns>
</asp:GridView>

如您所见,我没有使用row命令删除行。我在一个单独的
div
中有一个工具栏,它显示删除按钮


您能否指导我如何通过单击另一个
div
中的按钮从DataSource和GridView中删除一行

您可以使用隐藏字段通过javascript和Jquery放置行的id

<asp:HiddenField runat="server" ID="IDField"/>

使用下面的代码从datatable中删除处于ViewState或会话中的选定行,并分配数据源

还可以将数据键分配给GridView

<asp:GridView  ID="testGrid"    DataKeyNames="PrimaryKey" 
                CssClass="ObjSelection" 
                AutoGenerateColumns="false" 
                OnRowDataBound="testGrid_RowDataBound"
                runat="server">

如何获取被单击行的索引?
protected void delete_Click(object sender,EventArg e)
{
 //delete from datasource use this.IDField.Value   

//to refresh data in grid 
this.testGrid.DataSource = dataTable;
this.testGrid.DataBind();

}
gridview_RowDataBound(Sender sender,eventArgs e)
{
CheckBox lblChkRow = (CheckBox)e.Row.FindControl("IDField");
if(lblChkRow.Checked)
{
// Delete Value here and bind with datasource

}
<asp:GridView  ID="testGrid"    DataKeyNames="PrimaryKey" 
                CssClass="ObjSelection" 
                AutoGenerateColumns="false" 
                OnRowDataBound="testGrid_RowDataBound"
                runat="server">
protected void btnRemove(object sender, EventArgs e)
    {
        // Check session exists 
        if (Session["Key"] != null)
        {
            // Opening / Retreiving DataTable.
            DataTable dt = (DataTable)Session["Key"];

            foreach (GridViewRow row in testGrid.Rows)
            {
                CheckBox chkRow= row.Cells[0].FindControl("chkRow") as CheckBox;

                if (chkRow!= null && chkRow.Checked)
                {                    
                    int Id = Convert.ToInt32(testGrid.DataKeys[row.RowIndex].Value); 

                    DataRow[] drs = dt.Select("PrimaryKey = '" + Id + "'"); // replace with your criteria as appropriate

                    if (drs.Length > 0)
                    {
                        dt .Rows.Remove(drs[0]);
                    }
                }
            }

            Session["Key"] = dt ;
            testGrid.DataSource = dt ;
            testGrid.DataBind();
        }
    }