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
中删除行,但它不起作用。我正在使用getRowIndex
来执行此操作
我没有收到任何错误,只是当我单击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);