【问题标题】:Getting row values from gridview checkbox从 gridview 复选框获取行值
【发布时间】:2014-12-18 14:52:15
【问题描述】:

我知道这是一个老话题,但我找到的解决方案似乎都没有帮助。我是新手,所以请指导我: 我正在调用数据库以检索记录,然后这些记录与复选框一起显示在网格视图中。单击复选框时,我需要将选中的行记录与插入语句中的其他一些查询信息一起保存到单独的表中。问题是名字和姓氏没有被填充,导致空异常。任何人都可以查看此问题并告诉我如何解决它吗?

Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI.WebControls
Partial Class scores
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Me.GridView1.DataBind()
End Sub
Protected Sub Save_Click(sender As Object, e As EventArgs) Handles Save.Click
    For Each row As GridViewRow In GridView1.Rows
        Dim chkrow As CheckBox = DirectCast(row.FindControl("cb1"), CheckBox)
        If chkrow.Checked = True Then
            Dim firstname As TextBox = DirectCast(row.FindControl("firstname"), TextBox)
            Dim lastname As TextBox = DirectCast(row.FindControl("lastname"), TextBox)
            Dim conn As New SqlClient.SqlConnection
            Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand()
            conn.ConnectionString = "Data Source=SERVERNAME;Persist Security Info=True;User ID=ME;Password=PASSWORD;Initial Catalog=Testing"
            cmd.Connection = conn
            cmd.CommandText = "insert into scores (date, test, score, personid, testid) Values (getdate(), @test, @score, (select personid from persons where firstname = '" + firstname.Text + "' and lastname = '" + lastname.Text + "'), (select testid from tests where testnm ='" + DDL2.SelectedValue + "'))"
            conn.Open()
            Try
                cmd.Parameters.Add("@test", SqlDbType.NVarChar).Value = DDL2.SelectedValue
                cmd.Parameters.Add("@score", SqlDbType.NVarChar).Value = Score.Text
                cmd.ExecuteNonQuery()
                Response.Write("Saved")
            Catch ex As System.Data.SqlClient.SqlException
                MsgBox(ex.Message)
                conn.Close()
            End Try
            Exit For
        End If
    Next
End Sub

结束类

还有标记页面:

 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="scores.aspx.vb" Inherits="scores" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

            Scores<br /><br />
            Pick tester name <asp:GridView ID="GridView1" runat="server"    AutoGenerateColumns="False" DataKeyNames="personid" 
DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="CB1" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="personid" HeaderText="personid" InsertVisible="False" ReadOnly="True" SortExpression="personid" />
                    <asp:BoundField DataField="Firstname" HeaderText="Firstname" SortExpression="Firstname" />
                    <asp:BoundField DataField="Lastname" HeaderText="Lastname" SortExpression="Lastname" />
                    <asp:BoundField DataField="Social" HeaderText="Social" SortExpression="Social" />
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Testing %>" SelectCommand="SELECT [personid], [Firstname], [Lastname], [Social] FROM [Persons] where [personid] not in (select personid from scores) ORDER BY [Lastname]  "></asp:SqlDataSource>
            Test taken <asp:DropDownList ID="DDL2" runat="server" DataSourceID="SqlDataSource2" DataTextField="TestNM" DataValueField="TestNM"></asp:DropDownList>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Testing %>" SelectCommand="SELECT [TestNM], [testid] FROM [Tests] ORDER BY [TestNM]"></asp:SqlDataSource>
            Score <asp:TextBox ID="Score" runat="server"></asp:TextBox><br />
            <asp:Button ID="Save" runat="server" Text="Save" />
        </div>
        </form>
    </body>
    </html>

【问题讨论】:

    标签: vb.net gridview


    【解决方案1】:

    在我看来,您似乎在尝试读取所有数据(在 Page_Load 中)之前重新绑定了它。先尝试检查回发:

    If Not Page.IsPostback Then
        Me.GridView1.DataBind()
    End If
    

    【讨论】:

    • 添加此代码后没有变化。当我逐步执行代码时,名字和姓氏没有被填充,所以仍然没有将对象引用设置为对象的实例。堆栈跟踪指示 sql 查询,但是当我替换查询分析器中的变量时,该查询运行良好。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2015-05-28
    • 2018-05-08
    • 2017-10-06
    • 2017-01-16
    相关资源
    最近更新 更多