【问题标题】:Run an event when Checkbox is Checked/Unchecked Gridview C#选中/未选中复选框时运行事件 Gridview C#
【发布时间】:2017-02-13 13:32:05
【问题描述】:

我有一个有 4 列的 Gridview。全部在ItemTemplate 一列是一个复选框。此 Gridview 绑定到数据源。我想要做的是当复选框被选中时使用位值“1”更新数据库,如果我取消选中复选框以执行相同的操作但为“0”。

我已经知道用于更新数据库的 SQL 代码,但我不确定如何运行该事件,以便它查看网格视图中复选框所在的当前行。

这里是复选框列。

<asp:TemplateField  HeaderText="Pick" ItemStyle-CssClass="hrGrid" HeaderStyle-CssClass="hdrHrBase">
<ItemTemplate>
<asp:CheckBox id="cbViewCustomer" runat="server" OnCheckedChanged="ViewCustomer" onAutoPostBack="true" Checked='<%#(Eval("chosen"))%>'/>        
</ItemTemplate>
</asp:TemplateField>

我是否像这样使用 EventArgs: 这样做的问题是它更新了数据库,但更新了所有行。 我要做的是仅更新 Gridview 中的当前行。我只是不确定从这里去哪里。

protected void ViewCustomer(object sender, EventArgs e)
    {
        string SelectCustomer = "UPDATE tblcustomer Set chosen ='0'";
        NpgsqlCommand changedata = new NpgsqlCommand(SelectCustomer, con);
        con.Open();
        changedata.ExecuteNonQuery();
        con.Close();

    }

或者我应该做一些不同的事情吗?

【问题讨论】:

  • 你试过了吗?这是一个有效的解决方案。尽管您应该考虑是否要立即执行此操作...通常用户认为他们可以将内容编辑为草稿并且仅在单击保存按钮时才保存,但请确保不是这种情况并且用户理解选中该框将立即更新对象我发现这会让人们感到压力
  • 因为它是用相同的值更新整个列。我只是更新当前行的内容。
  • 什么?您需要发布执行更新的其他代码...您当然可以使用这样的事件处理程序来做您需要的事情

标签: c# asp.net gridview checkbox


【解决方案1】:

您可以使用 OnRowCommand 的 gridview 事件来做到这一点,如下所示:-

将 RowCommand 事件与您的 gridview 关联:-

<asp:GridView ID="mygridview" runat="server" OnRowCommand="mygridview_OnRowCommand">

接下来,将CommandNameCommandArgument 关联到您的复选框:-

<asp:TemplateField  HeaderText="Pick" ItemStyle-CssClass="hrGrid" >
   <ItemTemplate>
     <asp:CheckBox id="cbViewCustomer" runat="server" Checked='<%#(Eval("chosen"))%>' 
         CommandName="myCheckbox" CommandArgument="<%# Container.DataItemIndex %>"/>
   </ItemTemplate>
</asp:TemplateField>

在处理事件背后的代码中:-

protected mygridview_OnRowCommand (object sender, GridViewCommandEventArgs e)
{
     if(e.CommandName == "myCheckbox")
     {
          int rowIndex = Convert.ToInt32(e.CommandArgument);
          GridViewRow row = mygridview.Rows[rowIndex];
          bool ischecked = (row.FindControl("cbViewCustomer") as CheckBox).Checked;
     }
}

您也可以使用复选框选中事件来执行此操作,但如果您有多个控件,则触发 gridview 命令事件而不是单个事件。

【讨论】:

  • 案例返回此错误:错误 CS8070: Control cannot fall out of switch statement through final case label `case "cbViewCustomer":' (CS8070) (sbmanager)
  • @TommyMcGee - 这只是我给出的一个 C# case statement 问题。您可以改用更新后的代码。
  • 我一直在尝试您的建议,但我似乎无法让它发挥作用。没有错误。只是没有任何反应。我在 gridview 上设置了 OnRowCommand,在复选框上设置了 CommandName。但仍然没有任何反应。
  • @TommyMcGee - 你调试过代码吗?它是否命中了mygridview_OnRowCommand 事件处理程序?
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2019-04-13
  • 2017-11-03
  • 2019-03-13
相关资源
最近更新 更多