asp.net:如何通过特定行中的复选框更新 GridView 中的数据



我正在开发一个Web表单,在其中我显示带有数据的网格视图。其中一列由复选框组成。如何更新特定行中的数据。

所以我的问题是:

当用户选中或取消选中复选框时,如何取消识别特定行并使用 UPDATE 发送 sql 请求?

更新: 这是我的代码。它不会更新复选框的值。 命名空间:

public partial class Call_Bills : System.Web.UI.Page
{
SqlConnection con = new SqlConnection();
string check;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_Submit(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView2.Rows)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
con.Open();
bool private1 = (row.FindControl("CheckBox1") as CheckBox).Checked;
if (private1 == true)
{
check = "1";
}
else
{
check = "0";
}
SqlCommand cmd = new SqlCommand("insert into DetailCosts(private) values(@private)", con);
cmd.Parameters.AddWithValue("@private", check);
cmd.ExecuteNonQuery();
}}

网格视图的名称是:网格视图2; 表中复选框的名称:私有; 网格视图中复选框的 id 为:

<asp:TemplateField HeaderText="Private" SortExpression="private">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("private") %>'  />
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" />
</asp:TemplateField>

您可以手动定义一种方法来处理由 GridView 列内的控件生成的回发。为此,您只需将标记添加到控件AutoPostBack=TrueOnCheckedChanged=YourMethodName

在代码隐藏中,将此方法定义为 public void,并定义通常存在的参数(sender 作为对象,e 作为 EventArgs(,如下所示:

public void YourMethodName(object sender, EventArgs e)

在该方法上,您可能需要获取 GridViewRow,其中包含生成事件的控件。为此,只需解析 sender 参数(这将是复选框(并获取 2 个父级别(GridViewCell 和 GridViewRow(,它将如下所示:

GridViewRow row = ((CheckBox)sender).parent.parent;

由于您有该行,因此您可以使用 FindControl 方法获取其中的任何控件。如果您需要一个 id 来标识正在更新的 entitiy,您可以将其存储在行内的隐藏字段中。

希望对您有所帮助!

最新更新