【问题标题】:asp.net: How to update data in GridView through Checkbox in particular rowasp.net:如何通过特定行中的复选框更新 GridView 中的数据
【发布时间】:2018-06-04 11:27:25
【问题描述】:

我正在开发一个 Web 表单,在其中显示带有数据的 Gridview。其中一列由 CheckBox 组成。如何更新特定行中的数据。

所以我的问题是:

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

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

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();
         }}

GridView 的名称是:GridView2; 表中复选框的名称:私有; Gridview中CheckBox的id是:

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

【问题讨论】:

  • 你可以谷歌“CommandName”和“CommandArgument”并从那里开始。
  • 用户不会按任何按钮来检查复选框,它应该是动态的

标签: c# asp.net .net visual-studio webforms


【解决方案1】:

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

在代码隐藏中,将此方法定义为 public void,并定义通常存在的参数(sender 为 object,e 为 EventArgs),例如:

public void YourMethodName(object sender, EventArgs e)

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

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

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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多