我使用相同的技术在我的 VB.Net 程序中添加自定义MAX-STRING-LENGTH
约束。 TextBox
我使用 SQLSELECT
命令获取 4 列的值
SELECT code_pays
,nom
,code_pays_short
,default_devise
FROM pays
ORDER BY nom
我使用IDataReader
对象返回的结果来填充DataGridView
.
最后,我在Panel
包含 4 的 a 中显示每一行的字段TextBox
。
为了避免UPDATE
用于保存文本框中某些记录更改的 SQL 命令由于列值太长而返回错误消息,我在自定义文本框中添加了一个属性,以直接通知用户值的大小重叠。
这是我的表格
这是用于初始化MaxStringLength
属性的 VB.Net 代码
Private Sub PushColumnConstraints(dr As IDataReader)
Dim tb As DataTable = dr.GetSchemaTable()
Dim nColIndex As Integer = -1
For Each col As DataColumn In tb.Columns
If col.ColumnName = "ColumnSize" Then
nColIndex = col.Ordinal
Exit For
End If
Next
If nColIndex < 0 Then
oT.ThrowException("[ColumnSize] columns's index not found !")
Exit Sub
End If
txtCodePays.MaxStringLength = tb.Rows(0).Item(nColIndex)
txtPays.MaxStringLength = tb.Rows(1).Item(nColIndex)
txtShortCodePays.MaxStringLength = tb.Rows(2).Item(nColIndex)
txtDefaultDevise.MaxStringLength = tb.Rows(3).Item(nColIndex)
End Sub
在For
循环中,程序搜索ColumnSize
列值中包含的字段的索引。
MaxStringLength 属性使用以下语法分配
tb.Rows(%TEXT-BOX-INDEX%).Item(nColIndex)
.Rows(%TEXT-BOX-INDEX%)
用于在 SQL SELECT中识别列的元数据!
.Item(nColIndex)
用于获取特定列的元数据值
Item(n) 可以返回字符串或整数,但 VB.Net 会在必要时进行隐式转换。
这行代码也可以很快写
tb.Rows(%TEXT-BOX-INDEX%)(nColIndex)
tb(%TEXT-BOX-INDEX%)(nColIndex)
但它不可读!
注意:MaxStringLength
是自定义属性。它不是普通文本框的一部分。
Code Pays (3 lettres)
在上面的打印屏幕中,您可以看到程序向用户指示TextBox的长度太大。错误消息显示在StatusBar
表单底部。
此信息在单击SAVE
生成 SQLUPDATE
命令的按钮之前显示。
使用该调用PushColumnConstraints
方法的代码如下
Public Sub FillPanel()
SQL =
<sql-select>
SELECT code_pays
,nom
,code_pays_short
,default_devise
FROM pays
ORDER BY nom
</sql-select>
Dim cmd As New NpgsqlCommand(SQL, cn)
Dim dr As NpgsqlDataReader
Try
dr = cmd.ExecuteReader()
Catch ex As Exception
ThrowException(ex)
End Try
Call PushColumnConstraints(dr)