Vb.net 生成一个代码,如;50VIABC001“;如果该值为“;ABC";在“追加”之后再次出现;002‘&引用;003“;等等

Vb.net 生成一个代码,如;50VIABC001“;如果该值为“;ABC";在“追加”之后再次出现;002‘&引用;003“;等等,vb.net,gridview,data-binding,Vb.net,Gridview,Data Binding,我有一个网格,当用户点击任何名称时,它会将该名称的详细信息绑定到文本框、下拉列表等中 在这里,我有一个文本框,它为这个名字生成代码 我正在生成一个类似这样的代码。前4位数字“50VI”将保持不变,后面是“名字”、“中间名”和“姓氏”各1个字母。最后,它应该有3位数字,从“001”、“002”开始,依此类推 最后的3位数字应根据名字中间名和姓氏的3个字母确定 示例:50VIFMS001,其中F=FirstName M=MiddleName S=SirName。。 如果另一个人有类似的姓名格式,则代

我有一个网格,当用户点击任何名称时,它会将该名称的详细信息绑定到文本框、下拉列表等中

在这里,我有一个文本框,它为这个名字生成代码

我正在生成一个类似这样的代码。前4位数字“50VI”将保持不变,后面是“名字”、“中间名”和“姓氏”各1个字母。最后,它应该有3位数字,从“001”、“002”开始,依此类推

最后的3位数字应根据名字中间名和姓氏的3个字母确定

示例:50VIFMS001,其中F=FirstName M=MiddleName S=SirName。。 如果另一个人有类似的姓名格式,则代码应为“50VIFMS002”,依此类推

我已经在Vb.NET中编写了代码,但是现在我得到的值是“50VIFMS000”,其中“000”在任何地方都是相同的。所以我被最后三位数的部分卡住了

Public Function GenNewCode()

    Dim code As String = "50VI" & String.Concat(txtFName.Text.Trim, 
          txtMName.Text.Trim, txtLName.Text.Trim).ToUpper().Substring(0, 3)

    Dim exec As New ExecuteQuery

    Dim CNT As String = exec.ExecuteScalar("SELECT COUNT(*) FROM ADMDOCTMST WHERE DOCTCODE LIKE '" & code & "%'")

    txtNewCode.Text = code & CNT.PadLeft(2, "0")

    Return code

End Function

首先,启用选项Strict

Public Function GenNewCode()
函数具有返回类型

Dim code As String = "50VI" & String.Concat(txtFName.Text.Trim,  txtMName.Text.Trim, txtLName.Text.Trim).ToUpper().Substring(0, 3)
检查你的括号。.ToUpper和.Substring作用于连接的字符串;不是每个字符串都是单独的,因此您需要输入名字中的前三个字符

txtNewCode.Text = code & CNT.PadLeft(2, "0")
您的序列从001开始,因此如果查询返回计数3。那就是001,002,003。您需要增加计数以获得新值。另外,.PadLeft最多只能工作9次。检查递增值的长度,然后相应地填充

Return code
自原始Dim代码以来,您没有更改代码的值,因此无法获得所需的值。设置代码&。。。添加到文本框不会更改代码的值

Public Function GenNewCode() As String
        Dim FName As String = "Mary"
        Dim MName As String = "ruth"
        Dim LName As String = "Smith"
        Dim FInitial As String = FName.Substring(0, 1).ToUpper
        Dim MInitial As String = MName.Substring(0, 1).ToUpper
        Dim LInitial As String = LName.Substring(0, 1).ToUpper
        Dim code As String = "50VI" & FInitial & MInitial & LInitial
        Dim exec As New ExecuteQuery
        Dim CNT As Integer = CInt(exec.ExecuteScalar("SELECT COUNT(*) FROM ADMDOCTMST WHERE DOCTCODE LIKE '" & code & "%'"))
        CNT += 1
        Dim cntStr As String = CStr(CNT)
        Dim Padding As Integer = 3 - cntStr.Length 'You want a total length of 3 so subtract existing length from 3
        code &= cntStr.PadLeft(Padding, CChar("0"))
        Return code
End Function

您是否调试并检查了Dim CNT as string=…中的内容?嗨,Dhaval,我在Dim CNT as string中得到了“0”。。和txtNewCode.text中的“50VIABH00”我猜我的代码不正确..如果名字像FirstName=A.MiddleName=“”(空)和lastName=C,它会给出这样的代码“50VIA.C”。。它需要“.”甚至“(空格)也需要。请帮我做这件事。谢谢你非常感谢你玛丽…它起了作用:-)祝你有一个愉快的一天。上帝保佑