VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 833|回复: 9

为什么我删除不了。。DataGrid里面的CheckBox选中删除问题

[复制链接]

2

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-4 16:00:02 | 显示全部楼层 |阅读模式

        Dim i As Integer
        Dim ChBox As CheckBox
        For i = 0 To DataGrid1.Items.Count - 1
            ChBox = CType(DataGrid1.Items(i).Cells(0).FindControl("CheckBox1"), CheckBox)
            If ChBox.Checked = True Then
                Dim conn As New SqlConnection
                conn.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=netexam"
                conn.Open()
                Dim sql As String
                sql = "delete from question where id=ChBox"
                Dim cmd As New SqlCommand(sql, conn)
                cmd.ExecuteNonQuery()
                bind()
            End If
        Next
回复

使用道具 举报

0

主题

64

帖子

35.00

积分

新手上路

Rank: 1

积分
35.00
发表于 2020-1-4 16:42:01 | 显示全部楼层
把 bind() 删除掉。

如果还有问题,你应该调试,然后按照调试给出更明确的说明,说明你到底是怎么判断删除不了的。
回复

使用道具 举报

0

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-4 22:42:01 | 显示全部楼层
sql = "delete from question where id=ChBox"
这个语句有问题吧, 你都没有给ID正确赋值, 数据库里根本没有id=ChBox这条数据. 你应该定一列藏的模板列,定义一个Label 帮定id字段,
<asp:TemplateColumn>
                                                <ItemTemplate>
                                                        <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.id") %>'>
                                                        </asp:Label>
                                                </ItemTemplate>
                                        </asp:TemplateColumn>

然后

Dim i As Integer
Dim ChBox As CheckBox
Dim label1 As Label

For i = 0 To DataGrid1.Items.Count - 1
            ChBox = CType(DataGrid1.Items(i).Cells(0).FindControl("CheckBox1"), CheckBox)

label1 = CType(DataGrid1.Items(1).FindControl("label1"), Label)            
If ChBox.Checked = True Then
                Dim conn As New SqlConnection
                conn.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=netexam"
                conn.Open()
                Dim sql As String
                sql = "delete from question where id='"  + label1.Text + "'";
                Dim cmd As New SqlCommand(sql, conn)
                cmd.ExecuteNonQuery()
                bind()
            End If
        Next
回复

使用道具 举报

0

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-4 23:03:01 | 显示全部楼层
模板列的定义应是如下, 差点弄错了
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label runat="server" ID="label1"  Text='<%# DataBinder.Eval(Container, "DataItem.id") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
回复

使用道具 举报

2

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-6 10:39:01 | 显示全部楼层
谢xinyu5460的回答。。但还是有错误!我把代码贴出来帮我看看错在哪?我的思想是用DataGrid做考试系统的试卷审核功能。。用外面的CheckBox选取DataGrid里面的CheckBox。。然后用按钮可以把选取的试题提交或删除。
------------------------------------------------------------------
<Columns>
                                                <asp:TemplateColumn>
                                                        <ItemTemplate>
                                                                <asp:CheckBox id="CheckBox1" runat="server" AutoPostBack="True"></asp:CheckBox>
                                                        </ItemTemplate>
                                                </asp:TemplateColumn>
                                                <asp:TemplateColumn>
                                                        <ItemTemplate>
                                                                <asp:Label runat="server" ID="Label1" Text='<%# DataBinder.Eval(Container, "DataItem.id") %>'>
                                                                </asp:Label>
                                                        </ItemTemplate>
                                                </asp:TemplateColumn>
                                                <asp:BoundColumn DataField="question" HeaderText="问题"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="A" HeaderText="选项A"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="B" HeaderText="选项B"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="C" HeaderText="选项C"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="D" HeaderText="选项D"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="answer" HeaderText="答案"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="type" HeaderText="试题类型"></asp:BoundColumn>
                                                <asp:BoundColumn DataField="subjectname" HeaderText="试题科目"></asp:BoundColumn>
                                        </Columns>
-----------------------------------------------------------------------
        Dim i As Integer
        Dim ChBox As CheckBox
        Dim label1 As Label

        For i = 0 To DataGrid1.Items.Count - 1
            ChBox = CType(DataGrid1.Items(i).Cells(0).FindControl("CheckBox1"), CheckBox)

            label1 = CType(DataGrid1.Items(1).FindControl("label1"), Label)
            If ChBox.Checked = True Then
                Dim conn As New SqlConnection
                conn.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=netexam"
                conn.Open()
                Dim sql As String
                sql = "delete from question where id='" + label1.Text + "'"
                Dim cmd As New SqlCommand(sql, conn)
                cmd.ExecuteNonQuery()
                bind()
            End If
        Next
回复

使用道具 举报

0

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-26 18:54:01 | 显示全部楼层
因为你没有在循环结束就调用了Bind()方法, 如果你选择的不是第一行, 下面的CheckBox的选择全都没有效了, 你只需把Bind()的调用放在For循环后就OK了, 如下。
Dim i As Integer
        Dim ChBox As CheckBox
        Dim label1 As Label

        For i = 0 To DataGrid1.Items.Count - 1
            ChBox = CType(DataGrid1.Items(i).Cells(0).FindControl("CheckBox1"), CheckBox)

            label1 = CType(DataGrid1.Items(1).FindControl("label1"), Label)
            If ChBox.Checked = True Then
                Dim conn As New SqlConnection
                conn.ConnectionString = "server=127.0.0.1;uid=sa;pwd=;database=netexam"
                conn.Open()
                Dim sql As String
                sql = "delete from question where id='" + label1.Text + "'"
                Dim cmd As New SqlCommand(sql, conn)
                cmd.ExecuteNonQuery()
            End If
        Next
  bind()
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-26 21:45:01 | 显示全部楼层
sql = "delete from question where id=ChBox"
这个语句有问题
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-26 21:54:02 | 显示全部楼层
最好自己学着调试
回复

使用道具 举报

2

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-11 17:00:02 | 显示全部楼层
另外有个问题。。怎么提交DataGrid里面的CheckBox所选的题目去数据库的另外一个表啊?
回复

使用道具 举报

0

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-3-22 11:00:01 | 显示全部楼层
不是很明白你的问题是什么! 你要把选择的数据去生成另一个表中的数据, 用Insert 语句就行了啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表