2014-11-26 3 views
0

Я пытаюсь удалить строки из моего Gridview с помощью CommandName, но не работает. Я использую get RowIndex для этого.Удалить строку из Gridview с помощью CommandName

У меня нет ошибок, просто ничего не делается, когда я нажимаю на ImageButton.

Вот мой код:

<asp:GridView ID="GridView1" runat="server" Width="538px" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical" onselectedindexchanged="DropDownList5_SelectedIndexChanged" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt" Font-Size="Small" > 
    <AlternatingRowStyle BackColor="White" /> 

    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:ImageButton ID="ImageButton1" runat="server" Height="16px" ImageUrl="~/images/delete.png" Width="16px" CommandName="DeleteRow" /> 
      </ItemTemplate> 
      <HeaderStyle Width="30px" /> 
      <ItemStyle Height="10px" /> 
     </asp:TemplateField> 
    </Columns> 

    <FooterStyle BackColor="#CCCC99" /> 
    <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" /> 
    <RowStyle BackColor="#F7F7DE" /> 
    <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" /> 
    <SortedAscendingCellStyle BackColor="#FBFBF2" /> 
    <SortedAscendingHeaderStyle BackColor="#848384" /> 
    <SortedDescendingCellStyle BackColor="#EAEAD3" /> 
    <SortedDescendingHeaderStyle BackColor="#575357" /> 
</asp:GridView> 

Вот CS код:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     if (e.CommandName.Equals("DeleteRow")) 
     { 
      GridViewRow oItem = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer; 
      int RowIndex = oItem.RowIndex; 
      GridView1.DeleteRow(RowIndex); 
      DataBind(); 
     } 
    } 
} 
+0

[делать не отправлять дубликат кода/вопрос s] (http://stackoverflow.com/questions/27156371/delete-row-from-gridview1/27156460?noredirect=1#comment42807100_27156460) – MethodMan

+1

Разве это не то, что вы просили около 25 минут назад ?? http://stackoverflow.com/questions/27156371/delete-row-from-gridview1/27156689#27156689 – Shaharyar

+1

http://stackoverflow.com/questions/27156371/delete-row-from-gridview1/27156460?noredirect=1# comment42807100_27156460 – MethodMan

ответ

0

попробовать этот

Вместо того чтобы делать то, что ты сделал Я предлагаю вам удалить из базы данных и снова Bind the GridView

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 



    if (e.CommandName.Equals("DeleteRow")) 
    { 
     GridViewRow oItem = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer; 
     int RowIndex = oItem.RowIndex; 

     girdivewBind(); // Bind your gridview again. 
    } 

} 


public void deleteRecord(string ID) 
{ 
    using (SqlConnection con = new SqlConnection(cn.ConnectionString)) 
    { 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     cmd.CommandText = "delete from Mytable where [email protected]"; 
     cmd.Connection = con; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@id", ID); 
     con.Open(); 
     var temp = cmd.ExecuteNonQuery(); 
     con.Close(); 
     } 
    } 
} 
+0

Я не могу использовать RemoveAt –

+0

@JerryWest теперь обновлено –

+0

Я не могу удалить его из базы данных –

0

Попробуйте это:

GridView:

<ItemTemplate> 
    <asp:ImageButton CommandName="DeleteProduct" ID="ImageButton1" runat="server" CausesValidation="false" " ImageUrl="~/Admin/Images/SendToShop.png"/> 
</ItemTemplate> 

C#

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "DeleteProduct") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      GridViewRow row = grdCart.Rows[index]; 

      int productId = int.Parse(((Label)GridView1.Rows[row.RowIndex].FindControl("lbProdId")).Text); 

      DeleteProduct(productId); 
     } 
    } 

private void DeleteProduct (int productID) 
    { 
     //delete the product 
    } 
0

Если вы хотите удалить строку из базы данных, а также и отражает изменения на странице, то используйте GridViewID_RowCommand

aspx

<asp:GridView ID="GridView1" runat="server" 
onselectedindexchanged="DropDownList5_SelectedIndexChanged" 
CssClass="mGrid" 
PagerStyle-CssClass="pgr" 
AlternatingRowStyle-CssClass="alt" > 

     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:ImageButton ID="ImageButton1" runat="server" 
    Height="16px" ImageUrl="~/images/delete.png" 
    CommandName="DeleteRow" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

C#

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "DeleteRow") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      GridViewRow selectedRow = GridView1.Rows[index]; 
      string id = selectedRow.Cells[0].Text; //assuming your ID is the first column of your grid 
      SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString); //assuming your connection string is in web.config 
      con.Open(); 
      SqlCommand sq = new SqlCommand("DELETE FROM myTable where id='" + id + "'", con); 
      sq.ExecuteNonQuery(); 
      con.Close(); 
     } 

    } 

В случае, если вы не помните, индекс столбца вашего ID еще вы можете получить значение ID по имени Grid Headerfollow this answer

В вашем PageLoad

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(this.IsPostBack) 
     { 
     SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString); 
     con.Open(); 
     SqlCommand sqlCommand = new SqlCommand("SELECT * FROM myTable",con); 
     SqlDataReader reader = sqlCommand.ExecuteReader(); 
     GridView1.DataSource = reader; 
     GridView1.DataBind(); 
     con.Close(); 
    } 
    } 

EDIT: сетки shoul dn't be bind на PostBack, я не рекомендую этого делать. Обновление GridView не Page_Load, а обернуть GridView внутри UpdatePanel

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 

    <asp:GridView ID="gv1" ...> ... </asp:GridView> 

       </ContentTemplate> 
      </asp:UpdatePanel> 

затем вызвать UpdatePanel2.Update() везде, где вам необходимо обновить сетку (в этом случае вам необходимо Bind сетку, где вы изменяете его Источник, т.е. RowCommand и после обязательного звонка UpdatePanel2.Update())

Помните, что вы делаете, вы не можете остановить PostBack, потому что щелчок находится на кнопке.

0

Я выполнил запись строки в Gridview во время выполнения без записи записи в datatable. Пожалуйста, найдите код ниже.

Мой GridView

<asp:GridView ID="grdAddEditDefectParameterDetails" runat="server" OnRowDataBound="grdAddEditDefectParameterDetails_RowDataBound" OnRowDeleting="grdAddEditDefectParameterDetails_RowDeleting" > 
<Columns> 
    <asp:BoundField DataField="DEFECT_PARAM_CODE" HeaderStyle-CssClass="headTb4" Visible="false" 
     HeaderText="Defect No."> 
     <ItemStyle Wrap="False" /> 
    </asp:BoundField> 
    <asp:TemplateField HeaderStyle-CssClass="headTb4" HeaderStyle-Width="5%" HeaderText="Select"> 
     <ItemTemplate> 
      <asp:CheckBox ID="ChkStatus" runat="server" AutoPostBack="true" DataTextField="ACTIVE" 
       onclick="javascript:return OnChange(this);" /> 
      <asp:HiddenField ID="idDefectParam" runat="server" Value='<%# Eval("DEFECT_PARAM_CODE") %>' /> 
     </ItemTemplate> 
     <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="5%" /> 
    </asp:TemplateField> 
    <asp:BoundField DataField="DEFECT_PARAM_DESCRIPTION" ItemStyle-Width="44%" HeaderStyle-CssClass="headTb4" 
     HeaderText="Defect Parameter Description" HtmlEncode="false"> 
     <ItemStyle Wrap="False" /> 
    </asp:BoundField> 
    <asp:TemplateField HeaderText="Penalty Applicable" HeaderStyle-Width="7%" HeaderStyle-CssClass="headTb4"> 
     <ItemTemplate> 
      <asp:CheckBox ID="ChkPenalty" Enabled="false" runat="server" DataTextField="PENALTY_APPLICABLE"></asp:CheckBox> 
     </ItemTemplate> 
     <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="7%" /> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderStyle-CssClass="headTb4" HeaderText="Defect Weightage" HeaderStyle-Width="7%"> 
     <ItemTemplate> 
      <asp:TextBox ID="txtAddDefectWeightage" runat="server" CssClass="inputSmallGrid" 
       MaxLength="6" onkeypress="javascript:return isNumericKey(event);" Text="0.00" 
       AutoCompleteType="Disabled"></asp:TextBox> 
     </ItemTemplate> 
     <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="7%" /> 
    </asp:TemplateField> 

</Columns> 

В ваших .cs файл добавить следующие функции

protected void grdAddEditDefectParameterDetails_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 

    } 

После этого Райта следующий код, чтобы удалить строку

grdAddEditDefectParameterDetails.DeleteRow(grdAddEditDefectParameterDetails.Rows[i].RowIndex); 
Смежные вопросы