Удалить строку из asp GridView и из Datatable

У меня есть asp gridview, который связан с datatable. Только один столбец шаблона, который является флажком, связан с исходным столбцом данных (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">
 </asp:checkbox></headertemplate>
 <itemtemplate>
 <asp:checkbox autopostback="true" id="chkRow" runat="server" checked="<%# DataBinder.Eval(Container.DataItem, " sel")%="">" oncheckedchanged="ChkRow_OnCheckChange">
 </asp:checkbox></itemtemplate>
 </asp:templatefield> 

 </columns>
</asp:gridview>

Как вы видите, я не использую RowCommand для удаления строки. У меня есть панель инструментов в отдельном div, в котором отображается кнопка удаления.

Можете ли вы указать, как я могу удалить строку both from DataSource and GridView при нажатии кнопки, которая существует в другом div?

3 ответа

Используйте приведенный ниже код для удаления выбранной строки из datatable, которая находится либо в ViewState, либо в сеансе и назначает источник данных

Aslo назначить datakey для GridView

Код:

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();
 }
 }


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

}


вы можете использовать скрытое поле, чтобы поместить id строки в javascript и JQuery

JQuery

нажмите кнопку удаления

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();

}

licensed under cc by-sa 3.0 with attribution.