How can I remove selected data from the grid when a button is clicked?

I have a grid on my page and using the checkbox to check one or more lines in the grid, and I want to remove the marked line from the grid by pressing the delete button, which is located outside the grid.

In the table, I only have a name field, no field like ID.

How to delete a record.

Thanks in advance.

Here is my code What am I doing: -

private void GetData() { ArrayList arr; if (ViewState["TotalRecords"] != null) { arr = (ArrayList)ViewState["TotalRecords"]; } else { arr = new ArrayList(); } for (int i = 0; i < grdlistWord.Rows.Count; i++) { CheckBox chk = (CheckBox)grdlistWord.Rows[i].Cells[1].FindControl("chkWord"); if (chk.Checked) { if (!arr.Contains(grdlistWord.Rows[i].Cells[1])) { arr.Add(grdlistWord.Rows[i].Cells[1]); } } else { if (arr.Contains(grdlistWord.Rows[i].Cells[1])) { arr.Remove(grdlistWord.Rows[i].Cells[1]); } } } ViewState["TotalRecords"] = arr; } protected void lnkbtnDelete_Click(object sender, EventArgs e) { try { int count = 0; ArrayList arr = (ArrayList)ViewState["TotalRecords"]; count = arr.Count; for (int i = 0; i < grdlistWord.Rows.Count; i++) { if (arr.Contains(grdlistWord.Rows[i].Cells[1].Text)) { Response.Write(grdlistWord.Rows[i].Cells[1].Text.ToString()); DeleteRecord(grdlistWord.Rows[i].Cells[1].Text.ToString()); arr.Remove(grdlistWord.Rows[i].Cells[1].Text); } } ViewState["TotalRecords"] = arr; GridBind(); } catch (SqlException ex) { ex.ToString(); } } private void DeleteRecord(string word) { string query = "delete from searchword where word=@word "; SqlCommand cmd = new SqlCommand(query, con); cmd.Parameters.AddWithValue("@word", word); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } 

gridview html detail:

  <fieldset> <legend>List</legend> <asp:GridView ID="grdlistWord" runat="server" DataKeyNames="word" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="True" OnRowDataBound="grdlistWord_RowDataBound" OnRowDeleting="grdlistWord_RowDeleting"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:CheckBox ID="chkWord" runat="server" onclick="check_click(this);" /> </ItemTemplate> <HeaderTemplate> <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" /> <asp:LinkButton ID="ButtonDelete" runat="server" Text="Delete" OnClick="ButtonDelete_Click"></asp:LinkButton> </HeaderTemplate> </asp:TemplateField> <asp:BoundField DataField="Word" HeaderText="Word" /> <asp:HyperLinkField HeaderText="Edit" Text="edit" DataNavigateUrlFields="Word" DataNavigateUrlFormatString="SearchWord.aspx?words={0}&amp;mode=Edit" /> <asp:CommandField ShowDeleteButton="True" HeaderText="Delete" /> </Columns> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <EditRowStyle BackColor="#999999" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <EmptyDataTemplate>Records not exist!</EmptyDataTemplate> </asp:GridView> <asp:HiddenField ID="hfCount" runat="server" Value = "0" /> </fieldset> 
+1
source share
2 answers
  protected void lnkbtnDelete_Click(object sender, EventArgs e) { int counter = 0; List<string> words = new List<string>(); foreach (GridViewRow rowitem in grdlistWord.Rows) { if (((CheckBox)rowitem.Cells[0].FindControl("chkWord")).Checked == true)//i consider that the check box is in the first column index ---> 0 { counter++; words.Add(rowitem.Cells[1].Text); //i consider that the word is in the second column index ---> 1 } } ///////////////////////////////////////////////////////////// if(counter == 0) //no checks { //show some message box to clarify that no row has been selected. } ///////////////////////////////////////////////////////////// if (counter == 1) //one check { DeleteRecord(words[0]); //Show some message box to clarify that the operation has been executed successfully. } ///////////////////////////////////////////////////////////// if (counter > 1) //more than one check { for(int i=0; i<words.Count;i++) { DeleteRecord(words[i]); } //Show some message box to clarify that the operation has been executed successfully. } grdlistWord.DataBind(); } 
+1
source

For this purpose, you first set the primary key identifier in your table, which you retrieve as the grid source.

After you snap the grid, you must save this identifier in a hidden field. see the following code:

  <asp:GridView ID="gvwID" runat="server" AutoGenerateColumns="False" DataKeyNames="TableID"> <Columns> <asp:TemplateField> <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("TableID") %>'/> <asp:TemplateField> </Columns> </asp:GridView> 

Then, in the delete window, click the "Delete" button to get the selected row identifiers:

  protected void Btn_Click(object sender, EventArgs e) { int[] OrderIDList = new int[gvwID.Rows.Count]; int index = 0; for (int count = 0; count < gvwID.Rows.Count; count++) { if (gvwID.Rows[count].FindControl("chkSelect") != null) { if (((CheckBox)gvwID.Rows[count].FindControl("chkSelect")).Checked) { if (gvwID.Rows[count].FindControl("HiddenField1") != null) { string OrderID = ((HiddenField)gvwID.Rows[count].FindControl("HiddenField1")).Value; OrderIDList[index++] = Convret.ToInt32(OrderID); } } } } 

Then create the added row from the OrderIDList and pass it to the stored procedure. create xml from the stored procedure using the added string. Skip through xml and get each id and do the uninstall.

see procedure below:

  @IDList varchar(MAX) DECLARE @xmlUserIDs xml SELECT @xmlUserIDs = CONVERT(xml,'<root><cat>' + REPLACE(@IDList,',','</cat><cat>') + '</cat></root>')// creates xml from appended string DELETE FROM [TableName] WHERE [TableID] IN (SELECT [Value] = TCvalue('.','int') FROM @xmlUserIDs.nodes('/root/cat') T(C)); 

Hope this helps you.

+1
source

Source: https://habr.com/ru/post/888813/


All Articles