网格链接按钮 删除行而不是更新行



我的网格有 2 个链接按钮,删除按钮必须删除一行,确认按钮必须将 BIT 数据类型列从 False 更新为 True。"删除链接"按钮按预期正常工作,但"确认链接"按钮会删除该行,而不是更新它。我已经包含了我的网格和 C# 代码。

<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="report_num" OnRowDataBound="GridView1_RowDataBound" Width="995px">
<Columns>
<asp:BoundField DataField="report_num" HeaderText="report_num" />
<asp:BoundField DataField="location" HeaderText="location" />
<asp:BoundField DataField="lat" HeaderText="lat" />
<asp:BoundField DataField="lng" HeaderText="lng" />
<asp:BoundField DataField="severity_level" HeaderText="severity_level" />
<asp:TemplateField HeaderText="Confirm">
<ItemTemplate>
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">Confirm Report</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Delete Report</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>

C# 代码

protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton lnk1 = sender as LinkButton;
GridViewRow gridrow1 = lnk1.NamingContainer as GridViewRow;
int report_num = Convert.ToInt16(GridView1.DataKeys[gridrow1.RowIndex].Value.ToString());
con.Open();
cmd.CommandText = "UPDATE [temporary_markers] SET confirmation ='True' WHERE report_num =" + report_num;
cmd.Connection = con;
int a = cmd.ExecuteNonQuery();
con.Close();
if (a > 0)
{
bindGridView();
}
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
LinkButton lnk = sender as LinkButton;
GridViewRow gridrow = lnk.NamingContainer as GridViewRow;
int report_num = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
con.Open();
cmd.CommandText = "DELETE FROM [temporary_markers] WHERE report_num=" + report_num;
cmd.Connection = con;
int a = cmd.ExecuteNonQuery();
con.Close();
if (a > 0)
{
bindGridView();
}
}

删除方法有效,但更新无效

在查看代码时,您似乎正在执行与打算使用按钮执行的操作相反的操作。

确认:确认按钮调用删除报表的方法LinkButton2_Click

<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">Confirm Report
cmd.CommandText = "DELETE FROM [temporary_markers] WHERE report_num=" + report_num;

删除:删除按钮调用将确认设置为 True 的方法

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Delete Report
cmd.CommandText = "UPDATE [temporary_markers] SET confirmation ='True' WHERE report_num =" + report_num;

解决方案:将按钮上的标签从"确认"切换到"删除",反之亦然。

<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">Delete Report</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Confirm">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Confirm Report</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

此外,如果您的删除方法有效,则可能会使用确认 BIT 正确更新表。我在这两种方法中看到的其他区别是将字符串转换为 Int16/Int32 作为报告编号。将其更改为有效的(可能是 Convert.ToInt32 对于它所涵盖的数字范围(。

最新更新