2

以下のようなvb.net関数があり、チェックボックスコントロール名をパラメーターとして渡します。コードはここにあります

Public Function emaildata(ByVal grdv As GridView, ByVal ctrl As String, ByVal celpos As Integer) As GridView
        Dim comm As OleDbCommand = New OleDbCommand()
        Dim bpv As String = ""
        Dim gv As New GridView
        For Each gvrow As GridViewRow In grdv.Rows
            Dim chkbx As CheckBox = CType(gvrow.FindControl(ctrl), CheckBox)
            If chkbx.Checked Then
                If bpv <> "" Then
                    bpv += ","
                End If
                bpv += gvrow.Cells(celpos).Text
                comm.CommandText = "SELECT chq_num Cheque#,to_char(bpv_amt,'9,999,999,999') Amount,vch_nar Narration,bnf_nam PartyName,acc_des Bank from  CHECK_DATA where bpv_num in(" & bpv.ToString() & ") and BPV_DTE=to_date('" & TreeView2.SelectedValue & "')"
                comm.CommandType = CommandType.Text
                comm.Connection = con
                Dim da As New OleDbDataAdapter(comm)
                Dim ds As New DataSet
                da.Fill(ds)
                gv.DataSource = ds
                gv.DataBind()
            End If
        Next
        Return gv
    End Function

問題は、ラジオボタンとテキストボックスで同じ関数を使用する必要があり、すべてのタイプのコントロールに個別の関数を記述したくないことです。コントロールをパラメータとして検出します。たとえば、テキストボックスを渡すと、関数になります。テキストボックスのように動作する必要があり、ラジオの場合はラジオンの動作、チェックボックスの場合はこれと同じ動作です。関数を渡すためのこれらの3つのコントロールがあり、これらのコントロールの自動検出方法を作成したい

4

1 に答える 1

1

ctrlをCONTROL(すべてのコントロールの基本クラス)としてパラメーターとして送信する必要があります。

レイトバインディングを使用する必要があり、コントロールタイプごとに個別のケースを作成する必要があります。

以下のコードはチェックボックスでのみ機能します

Dim chkbx As CheckBox = CType(gvrow.FindControl(ctrl), CheckBox)
If chkbx.Checked Then

テキストボックスとラジオボタンの場合は、追加のコードを記述する必要があります

Public Function emaildata(ByVal grdv As GridView, ByVal ctrl As Control, ByVal celpos As Integer) As GridView

 If TypeOf ctrl Is Button Then

 ElseIf TypeOf ctrl Is RadioButton Then 

 Else

 EndIf
于 2012-11-03T09:57:10.107 に答える