Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据复选框更新gridview_C#_Asp.net_Vb.net_Web Services - Fatal编程技术网

C# 根据复选框更新gridview

C# 根据复选框更新gridview,c#,asp.net,vb.net,web-services,C#,Asp.net,Vb.net,Web Services,我有一个网格视图。它包含针对所有值的复选框。单击复选框并按“提交”后,所选项目将插入另一个数据库。我希望下次加载时,这些选定的项目不应出现在当前gridview上。 为此,我计划的是,当前数据库中必须有一列指示是否选中了复选框。该列将相应地填入是/否。然后显示其中只有“无”的行 然而,这似乎是漫长的。是否有其他方法来实现此目的。我不知道您使用的是什么DB,因此这是有限的,但它将根据复选框获取单元格的值。这假设chkbox位于第三个单元格索引2中,单元格0和1中有其他文本,我不知道DGV的外观。然

我有一个网格视图。它包含针对所有值的复选框。单击复选框并按“提交”后,所选项目将插入另一个数据库。我希望下次加载时,这些选定的项目不应出现在当前gridview上。 为此,我计划的是,当前数据库中必须有一列指示是否选中了复选框。该列将相应地填入是/否。然后显示其中只有“无”的行


然而,这似乎是漫长的。是否有其他方法来实现此目的。

我不知道您使用的是什么DB,因此这是有限的,但它将根据复选框获取单元格的值。这假设chkbox位于第三个单元格索引2中,单元格0和1中有其他文本,我不知道DGV的外观。然后,它将选中行的单元格值放入一个数据集,从那里您可以将数据集转储到您选择的数据库中,但不确定您拥有什么。就在下次加载时不显示行而言,例如,您可以将单元格4的文本更改为y/n单元格,然后更新当前数据库。下次加载DGV时,请在调用中包含以仅显示X列中带有“y”的行。是否使用SQL

 'get checked items and add to dataset
    Dim i As Integer = 0
    For i = 0 To Outdgv.RowCount - 1
        If Outdgv.Rows(i).Cells(2).Value = True Then
            Dim dsNewRow As DataRow
            dsNewRow = dataset.Tables("report").NewRow()
            Dim val1 As String = Outdgv.Rows(i).Cells(0).Value
            Dim val2 As String = Outdgv.Rows(i).Cells(1).Value
            dsNewRow.Item(1) = val1
            dsNewRow.Item(2) = val2
            dataset.Tables("report").Rows.Add(dsNewRow)
            Outdgv.Rows(i).Cells(3).Value = 'n'
        End If
    Next

从你对我的评论的答复来看,本届会议期间的限制似乎已经足够了。因此,您可以跟踪会话变量


例如,如果您的行具有整数id,则可以在会话中存储列表,并在每次提交选中行时向列表中添加id。然后在刷新网格时参考会话变量。

我不完全确定您的目标是什么,但是如果您试图隐藏直接从网格中检查的项目,这是可能的

查询:从[db]中选择*其中[Checked]=0

所以前提是如果值为零,它会出现在网格上。如果它变成任何其他值,它将不会显示在网格上

网格


因为我相信这是你问题的延续

我将从那里复制我的答案

对不起,如果不是用c写的,我刚才注意到了那个标记

您需要包括使记录在其表中唯一的主键或列。我将假设一个ImageID列

将其放置在第一列的隐藏字段中

在插入到目标数据库后,需要它对这些行发出SQLDELETE或UPDATE语句。尽管使用后者,您需要在表上有一个新列,比如说-TRANSFER_STATUS tinyint,一个可以更新1或0的开关

<Columns>
    <asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" 
                OnCheckedChanged="CheckUncheckAll"/>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID ="CheckBox2" runat="server" />
            <asp:HiddenField ID="hfImgID" runat="server" 
                Value=<%# Eval("ImageID") %> />
        </ItemTemplate>
    </asp:TemplateField>

下次是什么意思?任何时候?基本上,点击提交按钮后,页面会重新加载。在这一点上,网格视图必须更新,也就是说,选中的项目必须从网格视图中消失感谢响应,但我使用了完全相同的方法,使用了一个隐藏字段。这正是我在问题中所暗示的。我只是需要一些其他的方法。顺便说一下,我已经完成了这项工作,并且使用了完全相同的方法,所以我将把它标记为一个答案。使用类和存储过程可能会帮助您缩短代码。
protected void CustomerCheck_Click(object sender, EventArgs e)
{
     // Logic to modify column in database.
}
<Columns>
    <asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" 
                OnCheckedChanged="CheckUncheckAll"/>
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID ="CheckBox2" runat="server" />
            <asp:HiddenField ID="hfImgID" runat="server" 
                Value=<%# Eval("ImageID") %> />
        </ItemTemplate>
    </asp:TemplateField>
Dim cbSelect As CheckBox, imgToInsert As Image
Dim ddlStatus As DropDownList, hfImgID As HiddenField

For Each r As GridViewRow In gvDetails.Rows
    cbSelect = r.Cells(0).FindControl("CheckBox2")

    If cbSelect.Checked Then
        hfImgID = r.Cells(0).FindControl("hfImgID")
        imgToInsert = r.Cells(1).FindControl("imgPreview")
        ddlStatus = r.Cells(2).FindControl("dpdListEstatus")

        /*Insert statement goes here...
        DELETE or UPDATE statement goes here, 
        passing the ID of the image from hfImgID.Value*/
    End If
Next r

**EDIT**

/*Call your SELECT statement again here to refresh your GridView.
  If you used UPDATE, you need to include 
  your toggle switch in the WHERE clause. TRANSFER_STATUS = 0*/