Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CommandName从Gridview中删除行_C#_Asp.net - Fatal编程技术网

C# 使用CommandName从Gridview中删除行

C# 使用CommandName从Gridview中删除行,c#,asp.net,C#,Asp.net,我试图使用命令名从我的Gridview中删除行,但它不起作用。我正在使用getRowIndex来执行此操作 我没有收到任何错误,只是当我单击ImageButton时,它没有任何作用 这是我的密码: <asp:GridView ID="GridView1" runat="server" Width="538px" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding=

我试图使用
命令名
从我的
Gridview
中删除行,但它不起作用。我正在使用get
RowIndex
来执行此操作

我没有收到任何错误,只是当我单击
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>
试试这个

我将建议您从数据库中删除并再次绑定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 ID=@id";
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@id", ID);
        con.Open();
        var temp = cmd.ExecuteNonQuery();
        con.Close();
       }
   }
 }
试试这个:

GridView:

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

如果还想从数据库中删除该行并在页面上反映更改,请使用
GridViewID\u RowCommand

aspx

如果您不记得
ID
的列索引,您仍然可以通过
网格标题的名称获取
ID

在页面加载中

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();
     }
   }
编辑:不应在
回发时绑定网格,我建议不要这样做。不在
页面加载中更新gridview
,而是将
gridview
包装在
更新面板中

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

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

                 </ContentTemplate>
          </asp:UpdatePanel>

... 
然后在需要更新网格的任何地方调用
UpdatePanel2.Update()
(在这种情况下,需要
绑定
正在修改其源代码的网格,即
RowCommand
,并在绑定后调用
UpdatePanel2.Update()


记住,无论您做什么,您都不能停止回发,因为点击按钮。

我在运行时在Gridview中完成了行删除,而没有删除datatable中的记录。请在下面查找代码

我的网格视图

<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>
之后,编写以下代码以删除该行

grdAddEditDefectParameterDetails.DeleteRow(grdAddEditDefectParameterDetails.Rows[i].RowIndex);

这和你25分钟前问的不一样吗??我试图删除该问题,但也失败了。为什么要在事件中检查
ispostback
,点击链接按钮是否会触发回发。。?如果您不确定,则
if(IsPostBack)
检查您的
页面_Load
并查看它是否符合代码。。另请查看相反的检查
if(!IsPostBack(){}
阅读
对对象调用Bind(即
gridview1.Bind()`和调用
DataBind()
方法之间的区别。如果您不了解何时以及如何从数据库中删除它,这将使您发疯
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();
     }
   }
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
              <ContentTemplate>

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

                 </ContentTemplate>
          </asp:UpdatePanel>
<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>
protected void grdAddEditDefectParameterDetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {

    }
grdAddEditDefectParameterDetails.DeleteRow(grdAddEditDefectParameterDetails.Rows[i].RowIndex);