首页 > 解决方案 > 如何使用位于 GridView 外部的按钮更新由 Asp GridView 中选定行指定的数据库中的所有数据?

问题描述

我寻找了一些类似的问题,但只找到了ListView解决方案

但是我有一个GridView和一个按钮,GridView并且只需要更新由选定复选框指定的记录。

<asp:GridView ID="gvData"
  runat="server" Width = "850px"
  CellPadding="5"
  AutoGenerateColumns="false"
  AllowPaging ="true"
  OnPageIndexChanging ="OnPaging" PageSize="5"> 
    <HeaderStyle CssClass="HeaderStyle" />
    <PagerStyle CssClass="HeaderStyle" HorizontalAlign="Center" />
    <AlternatingRowStyle CssClass="AlternatingRowStyle" />
    <RowStyle CssClass="RowStyle" />
    <RowStyle HorizontalAlign="Left" />
 <Columns>
    <asp:TemplateField HeaderText="Id" ItemStyle-Width="20px" Visible="false">
        <ItemTemplate>
            <asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Select" ItemStyle-Width="20px">
        <ItemTemplate>
            <asp:CheckBox ID="chkSelect" runat="server" Checked = "false"></asp:CheckBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Message" ItemStyle-Width="200px">
        <ItemTemplate>
            <asp:Label ID="lblMessage" runat="server"  Width="500px" Text='<%# Eval("Message") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>
<br />

<div style="text-align:left;">
   <asp:Button ID="btnChange" runat="server" Text="Change Type" OnClick="btnChange_Click" />
</div>

我有一个方法btnChange_Click()

protected void btnChange_Click()
{

    int index = gvFailedMerchants.SelectedRow.RowIndex;

    DbConnection.UpdateMessageType(index);

}

当我点击按钮时,我收到了消息

“你调用的对象是空的”

我想编写一个逻辑,在其中遍历网格并将所选行的 id 添加到一个字符串中,其中所有 id 用逗号分隔:

1,2,3,4,5

然后我会将此字符串发送到存储过程,并在IN关闭的查询中使用它们:

UPDATE MYTABLE SET column = myValue WHERE ID IN('1,2,3,4,5')

我不知道解决问题的正确方法是什么。

我怎样才能做到这一点?

标签: asp.netcheckboxgridview

解决方案


Please try this,
 <asp:TemplateField HeaderText="Select" ItemStyle-Width="20px">
    <ItemTemplate>
        <asp:CheckBox ID="chkSelect" runat="server" Checked = "false"  
         OnCheckedChanged="ChkSelect_CheckedChanged" data-id='<%# Eval("id") %>'></asp:CheckBox>
    </ItemTemplate>
</asp:TemplateField>

  protected void ChkSelect_CheckedChanged(object sender, EventArgs e)
{
    try
    {
        CheckBox chkSel = sender as CheckBox;
        string id= chkSel.Attributes["data-id"].ToString();

        if (chkSel.Checked == true)
        {
            Session["ID"] += (Session["ID"].ToString() == "" ? id: "," + id);
        }
        else
        {
          string existingCodes = Session["ID"].ToString();
           Session["ID"] = existingCodes.Replace(id, "");               
       }
protected void btnChange_Click()
 {
    string ids =  Session["ID"].ToString();
    DbConnection.UpdateMessageType(ids);
  }

推荐阅读