关于DATASET新增后的显示问题?回答出来一定给分

时间:2021-06-07 14:35:18
有三个文本框,分别绑定T001表的:ID,CODE,NAME
还有一个DATAGRID,绑定T002表的内容,参数为上面的第一个文本框的值:ID
现在的问题是:ID在数据库中是自动生成的,在给三个文本框新增时,UPDATE后,第一个文本框不显示ID值,因此DATAGRID绑定出问题,请问如何解决?新增之后必须显示当前页面。

7 个解决方案

#1


把你写的绑定的代码贴出来看看。

#2


Private Sub btsubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btsubmit.Click
        Dim anyRow As DataRow = DataSet11.T005.NewRow
        anyRow(1) = TextBox2.Text
        anyRow(2) = TextBox3.Text
        DataSet11.T005.Rows.Add(anyRow)
        SqlDataAdapter1.Update(DataSet11, "t005")
        TextBox1.DataBind()
        TextBox2.DataBind()
        TextBox3.DataBind()
        If TextBox1.Text <> "" Then
            SqlDataAdapter2.SelectCommand.Parameters("@clientid").Value = CInt(TextBox1.Text)
            SqlDataAdapter2.Fill(DataSet11, "t006")
            DataGrid1.DataBind()
        End If
    End Sub
现在的问题是新增之后跳到第一笔记录去了,而不是当前新增的记录,怎么解决?

#3


If TextBox1.Text <> "" Then
   SqlDataAdapter2.SelectCommand.Parameters("@clientid").Value = CInt(TextBox1.Text)
   SqlDataAdapter2.Fill(DataSet11, "t006")
   DataGrid1.DataBind()
End If
是不是因为这个if的条件,在TextBox2和TextBox3填进新的值的时候,TextBox1还没有从数据库中取出新的值来。所以绑定的还是原来的值。

#4


不是,当初没有IF时,报错,因为TEXTBOX1.TEXT为空,所以就不知道为什么ID没有绑定上,怎么解决?

#5


应该这样,当你第一个datagrid newrow添加的时候id在数据库自动产生,但是你帮定的dataset显示的第一行没有拿到新的id值,因为这个时候的dataset是在内存中进行的而不是直接从数据库取出来的。
所以建议你用存储过程添加纪录,这样每增加一条记录返回一个新的id值,这样你的第二个DataGrid的榜定就不会有问题了
还有一种方法,就是你在Nowrow的时候就从数据库取出new Id值,然后一起update到数据库。这样第二层datagrid也不会出错。

#6


用存储过程添加记录,能不能说具体一点。
第2种方法,怎样得到NEW ID ,多用户情况下?

#7


我用存储过程确实得到了新的ID,但是ID绑定了,其他文本框的值变不了,除非直接用把存储过程的参数赋给它们,这样却没绑定,也就是没刷新,因此本页的定位也没变(也就是本条记录在DATASET里的索引),其他操作也不对了。

#1


把你写的绑定的代码贴出来看看。

#2


Private Sub btsubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btsubmit.Click
        Dim anyRow As DataRow = DataSet11.T005.NewRow
        anyRow(1) = TextBox2.Text
        anyRow(2) = TextBox3.Text
        DataSet11.T005.Rows.Add(anyRow)
        SqlDataAdapter1.Update(DataSet11, "t005")
        TextBox1.DataBind()
        TextBox2.DataBind()
        TextBox3.DataBind()
        If TextBox1.Text <> "" Then
            SqlDataAdapter2.SelectCommand.Parameters("@clientid").Value = CInt(TextBox1.Text)
            SqlDataAdapter2.Fill(DataSet11, "t006")
            DataGrid1.DataBind()
        End If
    End Sub
现在的问题是新增之后跳到第一笔记录去了,而不是当前新增的记录,怎么解决?

#3


If TextBox1.Text <> "" Then
   SqlDataAdapter2.SelectCommand.Parameters("@clientid").Value = CInt(TextBox1.Text)
   SqlDataAdapter2.Fill(DataSet11, "t006")
   DataGrid1.DataBind()
End If
是不是因为这个if的条件,在TextBox2和TextBox3填进新的值的时候,TextBox1还没有从数据库中取出新的值来。所以绑定的还是原来的值。

#4


不是,当初没有IF时,报错,因为TEXTBOX1.TEXT为空,所以就不知道为什么ID没有绑定上,怎么解决?

#5


应该这样,当你第一个datagrid newrow添加的时候id在数据库自动产生,但是你帮定的dataset显示的第一行没有拿到新的id值,因为这个时候的dataset是在内存中进行的而不是直接从数据库取出来的。
所以建议你用存储过程添加纪录,这样每增加一条记录返回一个新的id值,这样你的第二个DataGrid的榜定就不会有问题了
还有一种方法,就是你在Nowrow的时候就从数据库取出new Id值,然后一起update到数据库。这样第二层datagrid也不会出错。

#6


用存储过程添加记录,能不能说具体一点。
第2种方法,怎样得到NEW ID ,多用户情况下?

#7


我用存储过程确实得到了新的ID,但是ID绑定了,其他文本框的值变不了,除非直接用把存储过程的参数赋给它们,这样却没绑定,也就是没刷新,因此本页的定位也没变(也就是本条记录在DATASET里的索引),其他操作也不对了。