我之前发过一个问题,但它太复杂了,我认为这就是为什么没有人试图回答它的原因。所以我决定用最简单的方式来做这件事。所以这是我的代码:
Private Sub frmcrc_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conn = GetConnect()
Dim com As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader
conn.Open()
com.CommandText = "Select * from tblCRClearance where crc_no = '" & frmComm.txtCRCNum1.Text & "'"
com.Connection = conn
dr = com.ExecuteReader
dr.Read()
txtCRCNo.Text = dr!crc_no
txtCLTAcctNo.Text = dr!crc_clientno
lblrootpayee.Text = dr!crc_rootpayee
txtPayeeName.Text = dr!crc_payeename
txtClientName.Text = dr!crc_clientname
txtProjName.Text = dr!crc_projectname
txtCommType.Text = dr!crc_commtype
txtGrossAmt.Text = dr!crc_grossamount
txtWTax.Text = dr!crc_withheld
txtCALType1.Text = dr!crc_caliqtype1
txtCALDate1.Text = dr!crc_caliqdate1
txtCALNo1.Text = dr!crc_caliqnum1
txtCALAmt1.Text = dr!crc_caliqamt1
txtCALDesc1.Text = dr!crc_caliqdesc1
txtCALType2.Text = dr!crc_caliqtype2
txtCALNo2.Text = dr!crc_caliqnum2
txtCALAmt2.Text = dr!crc_caliqnum2
txtCALDate2.Text = dr!crc_caliqdate2
txtCALDesc2.Text = dr!crc_caliqdesc2
txtCALType3.Text = dr!crc_caliqtype3
txtCALDate3.Text = dr!crc_caliqdate3
txtCALNo3.Text = dr!crc_caliqnum3
txtCALAmt3.Text = dr!crc_caliqamt3
txtCALDesc3.Text = dr!crc_caliqdesc3
txtCALIQ.Text = dr!crc_caliqtotal
txtNetAmt.Text = dr!crc_netamount
txtVoucherNum.Text = dr!crc_voucherno
txtCRLNum.Text = dr!crc_crlno
txtDate.Text = dr!crc_date
txtCPFNo.Text = dr!crc_cpfno
txtPreparedBy.Text = dr!crc_preparedby
txtCheckedBy.Text = dr!crc_checkedby
txtApprovedBy.Text = dr!crc_approvedby
txtGrossPrice.Text = dr!crc_grossprice
txtLess1.Text = dr!crc_lessprice1
txtDesc1.Text = dr!crc_lessdesc1
txtLess2.Text = dr!crc_lessprice2
txtDesc2.Text = dr!crc_lessdesc2
txtLess3.Text = dr!crc_lessprice3
txtDesc3.Text = dr!crc_lessdesc3
txtNetSellingP.Text = dr!crc_netsellingprice
txtRate.Text = dr!crc_rate
txtGrossRel.Text = dr!crc_grossrelease
txtDed1.Text = dr!crc_ded1
txtDDesc1.Text = dr!crc_deddesc1
txtDed2.Text = dr!crc_ded2
txtDDesc2.Text = dr!crc_deddesc2
txtDed3.Text = dr!crc_ded3
txtDDesc3.Text = dr!crc_deddesc3
txtDed4.Text = dr!crc_ded4
txtDDesc4.Text = dr!crc_deddesc4
txtDed5.Text = dr!crc_ded5
txtNetRel.Text = dr!crc_netrelease
txtCollectibles.Text = dr!crc_collectibles
conn.Close()
txtCLTAcctNo.Text = frmComm.cmbAcctNo1.Text
txtCRLNum.Text = frmComm.txtCRLNo.Text
txtProjName.Text = frmComm.txtUnitCode1.Text
txtClientName.Text = frmComm.cmbClientName1.Text + " " + frmComm.Label13.Text
txtCommType.Text = frmComm.cmbParticulars1.Text
txtPayeeName.Text = frmComm.cmbPayee01.Text
Me.lblrootpayee.Text = frmComm.lblrootpayee.Text
End Sub
它的工作方式如下:sql查询获取的crc编号与txtCRCNum1中的数据相同。它的工作方式与我想要的一样,但我有一些问题。我有30个文本框,就像txtCRCNum1一样,因此将有30个不同的crc编号值,具体取决于我将获得其值的文本框。我想要一个条件语句,其中它检查应该包含crc编号的文本框是否为空。如果它是空的,那么将显示字段:
txtCLTAcctNo.Text = frmComm.cmbAcctNo1.Text
txtCRLNum.Text = frmComm.txtCRLNo.Text
txtProjName.Text = frmComm.txtUnitCode1.Text
txtClientName.Text = frmComm.cmbClientName1.Text + " " + frmComm.Label13.Text
txtCommType.Text = frmComm.cmbParticulars1.Text
txtPayeeName.Text = frmComm.cmbPayee01.Text
Me.lblrootpayee.Text = frmComm.lblrootpayee.Text
如果不为空,则执行sql查询部分。
我应该如何设置条件语句以使其按照我的描述工作?
答案 0 :(得分:1)
您可以像处理其他类一样向表单添加过程和方法。在这种情况下,由于CRCForm在所有情况下都取决于crc值,我们将在构造函数中传递它。
Public Class frmcrc
' a crc value property
Private _crcVal As String = "" ' I am guessing it is string
' the constructor
public Sub New(crcval As String)
' This call is required by the designer.
InitializeComponent()
_crcVal = crcval
End Sub
' etc
End Class
当用户点击30(?!)文本框/按钮对中的一个时。这需要一个表单实例而不是VB默认实例(即frmcrc.Show
),无论如何都是坏的。
Dim f As New frmCrc(txtCRCNum1.Text)
f.Show
表单现在具有处理TB1,Tb2或TB22所需的值。表格不需要知道或关心它来自何处。该查询将在SQL中使用_crcVal。
现有的表单加载代码只需要处理_crcVal
为String.Empty
的情况。如果它不是String.Empty,那么只发布frmComm
部分(可能应该是一个类)否则执行查询并显示结果。
您还可以向表单添加CrcValue属性以执行查询并显示结果而不创建新的表单实例,只需使用新的crcvalue。
修改强>
“其他”东西的一个类 - 我无法分辨数据代表什么,我称之为BaseAcct:
Public|Friend Class BaseAcct
Public Property AccountNumber As String
Public Property UnitCode As String
' etc
End Class
较新的版本支持自动实现的属性,这就是定义属性所需的全部内容。旧版本,您需要编写Get和Set代码。您还可以添加FetchData
和DisplayData
等过程,让类从一个表单获取数据并将其发布到另一个表单,指定哪个表单作为参数。您必须将数据从一个表格复制到另一个表格的ELSE可以是:
Dim BAcct As New BaseAcct
' ... etc
If _crcVal <> String.Empty Then
' ...
Else
BAcct.Display(Me) ' let the class post the data to this form
End If
crcVal可以是类中的一个属性,但即使它是,我还是要求它在构造函数中传递给frmcrc
,因为似乎是的形式没有它就毫无意义。也就是说,您的代码不应该能够创建没有该值的表单实例。
答案 1 :(得分:0)
首先,你应该知道所有30个文本框ID'。我不知道你会在哪里放置if语句。但我建议你有一个button_click事件,你将检查所有文本框。
所有不同的30个文本框的另一件事,你有相同的文本框,如txtCRCNo,txtCLTAcctNo,lblrootpayee等, 如果是这样,那么您一次只能允许一个文本框。
因此,为所有文本框创建textbox_TextChanged事件,而在文本框中键入时,所有其他文本框都应为空。
注意:将所有文本框放在面板中。
等
Sub txtCRCNum1_TextChanged()
txtCRCNum2.Text=""
txtCRCNum2.Enabled=False
' and so on
End Sub
现在很容易在button_click
上制作解决方案 Sub button_click()
Dim ctrl As New Control
For Each ctrl In Panel1.Controls
If TypeOf ctrl Is TextBox Then
If ctrl.Text <> "" Then
'sql query with that textbox
End If
End If
Next