永发信息网

[.net][300分]数据库绑定到控件后,如何验证内容的合法性?

答案:1  悬赏:0  手机版
解决时间 2021-06-06 10:15
  • 提问者网友:太高姿态
  • 2021-06-05 20:49

这个问题一直没有得到解答.希望高手关注!(只能选择100分,问题解答之后额外追分,谢谢!)

环境:

VB 2005,SQL 2005,Win XP

问题描述:

首先,我有已经赋值的SqlDataAdapter和DataSet

Dim Adapter As SqlDataAdapter
Dim Dt As DataSet

'具体赋值代码略去(连接数据库,查询数据库云云)

然后我将窗体上的文本框TextBox1与数据库绑定.

使用的如下方法:

TextBox1.DataBindings.Clear()

TextBox1.DataBindings.Add("Text", Dt, "表1.字段1")

此时,TextBox1已经和数据库中表1的字段1实现了绑定.

其可以显示出字段1的内容.

然后,我使用如下代码来实现更新数据库内容:

Me.BindingContext(Dt, "表1").EndCurrentEdit()
Dim dffTbl As DataTable = Dt.Tables("表1").GetChanges

Adapter.Update(dffTbl)

此时,TextBox1的变化已经可以更新到数据库.

接着,问题来了!!!!!

如果字段1是个int字段,只接受数字,而用户又在TextBox1中输入了"abc",那么,在执行更新操作时,就会报错!

如果字段1是个Varchar(2)字段,只能输入2个字符,而用户输入了"12345",那么,也会报错!

我想请教的是,如何实现Textbox1的输入验证?

也就是在用户输入非法内容的时候,给出相应提示!

请注意,我希望的是一个通用的办法!

例如,若字段1是int,那么TextBox1只能输入整数;如果字段1是varchar(2),那么只能输入varchar(2)的内容;如果....

就是让Textbox1适应所有的字段类型!

即使绑定字段的发生了变化,Textbox1的验证也要准确无误!

诚心请教高手来为我解答疑问!

(就此绑定问题解答,暂时不希望使用其他绑定办法!)

为了帮助高手了解问题,我再给出工程中的部分代码,希望对解决问题有所帮助.

Dim Adapter As SqlDataAdapter
Dim Dt As DataSet

'读出数据按钮

Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Adapter = DBUnit.GetAdapter("SELECT * FROM AccountTbl WHERe Username='blue'") 'DBUnit是一个数据库操作类,不必在意
Dim builder As SqlCommandBuilder
builder = New SqlCommandBuilder(Adapter)
builder.QuotePrefix = "["
builder.QuoteSuffix = "]"
Dt = New DataSet
Adapter.Fill(Dt, "AccountTbl")
TextBox1.DataBindings.Clear()
TextBox2.DataBindings.Clear()
TextBox1.DataBindings.Add("Text", Dt, "AccountTbl.Username")
TextBox2.DataBindings.Add("Text", Dt, "AccountTbl.Password")

End Sub

'更新数据按钮

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Me.BindingContext(Dt, "AccountTbl").EndCurrentEdit()
Dim dffTbl As DataTable = Dt.Tables("AccountTbl").GetChanges
If dffTbl IsNot Nothing Then
Adapter.Update(dffTbl)
Dt.Merge(dffTbl)
Dt.AcceptChanges()
Dt.Tables("AccountTbl").Clear()
Adapter.Fill(Dt, "AccountTbl")
End If
End Sub

最佳答案
  • 五星知识达人网友:未来江山和你
  • 2021-06-05 20:57

我可以这样理解吗:


目前遇到的问题是:数据类型验证问题,及输入的数据要符合特定类型才可以提交,否则出错。


解决问题的前提:动态绑定,要求textbox具有通用性。



解决这个问题的一个思路:


1、绑定的同时获取此列的数据类型。(Datatable.Columns["列名"].DataType )


2、textbox是一个自己封装的控件,传入上述的类型,在光标离开时触发验证。封装控件的方法可以参考《textBOX验证控件,自动验证数据正确与否!只需选择你的数据类型》


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯