C# 从asp GridView和Datatable中删除行
我有一个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"
sel
)绑定
以下是标记示例:
<asp:GridView ID="testGrid"
CssClass="ObjSelection"
AutoGenerateColumns="false"
OnRowDataBound="testGrid_RowDataBound"
runat="server">
<Columns>
<asp:TemplateField HeaderText=" ">
<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();
}
}