我正在开发一个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=True
和OnCheckedChanged=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,您可以将其存储在行内的隐藏字段中。
希望对您有所帮助!