将参数传递给Code Behind中的子程序

时间:2010-05-29 06:23:53

标签: asp.net asp.net-2.0

我正在尝试将活动ID(RefNum)传递给我的代码隐藏中的Sub。我知道在将参数传递给子程序和方法时我应该使用括号,我尝试了很多方法并继续收到以下错误:

BC30203:预期的标识符。

我在前端硬编码只是为了试图让它通过[OnDataBound =“FillSectorCBList(”“”WK.002“”“)”],但这显然是错误的。 :(

前端:

<asp:DetailsView ID="dvEditActivity"  AutoGenerateRows="False" DataKeyNames="RefNum" OnDataBound="dvSectorID_DataBound" OnItemUpdated="dvEditActivity_ItemUpdated" DataSourceID="dsEditActivity" >
   <Fields>
      <asp:TemplateField>  
                <ItemTemplate>
                    <br /><span style="color:#0e85c1;font-weight:bold">Sector</span><br /><br />
                    <asp:CheckBoxList ID="cblistSector" runat="server" DataSourceID="dsGetSectorNames" DataTextField="SectorName" DataValueField="SectorID" OnDataBound="FillSectorCBList("""WK.002""")" ></asp:CheckBoxList>
                    <%-- Datasource to populate cblistSector --%>
                    <asp:SqlDataSource ID="dsGetSectorNames" runat="server" ConnectionString="<%$ ConnectionStrings:dbConn %>" ProviderName="<%$ ConnectionStrings:dbConn.ProviderName %>" SelectCommand="SELECT SectorID, SectorName from Sector ORDER BY SectorID"></asp:SqlDataSource>
                </ItemTemplate>
              </asp:TemplateField>
  </Fields>
</asp:DetailsView>

代码隐藏:

Sub FillSectorCBList(ByVal RefNum As String,ByVal sender As Object,ByVal e As System.EventArgs)         Dim SectorIDs为New ListItem

    Dim myConnection As String = ConfigurationManager.ConnectionStrings("dbConn").ConnectionString()
    Dim objConn As New SqlConnection(myConnection)
    Dim strSQL As String = "SELECT DISTINCT A.RefNum, AS1.SectorID, S.SectorName FROM Activity A LEFT OUTER JOIN Activity_Sector AS1 ON AS1.RefNum = A.RefNum LEFT OUTER JOIN Sector S ON AS1.SectorID = S.SectorID WHERE A.RefNum = @RefNum ORDER BY A.RefNum"
    Dim objCommand As New SqlCommand(strSQL, objConn)
    objCommand.Parameters.AddWithValue("RefNum", RefNum)

    Dim ad As New SqlDataAdapter(objCommand)

    Try
       [Code]
    Finally
       [Code]
    End Try

    objCommand.Connection.Close()
    objCommand.Dispose()
    objConn.Close()
End Sub

任何建议都会很棒。我不确定我是否有正确的方法。

谢谢!

3 个答案:

答案 0 :(得分:1)

您无法将参数传递给OnDataBound事件方法。该方法必须遵循特定签名。由于这个参数本质上是一个程序常量,我只是将它编码到方法中或从某个地方读取它。当然,您也可以使用处理事件的方法调用接受参数的其他方法。

答案 1 :(得分:1)

更改您的

OnDataBound="FillSectorCBList("""WK.002""")"

OnDataBound='FillSectorCBList("WK.002")' 

虽然这会处理标识符预期的错误,但在我提交之前,Joel会发布另一个很可能导致另一个错误。

答案 2 :(得分:0)

正如其他人发布的那样,您是否无法为此目的使用OnDataBound事件。您需要将DataSource属性设置为所需的方法。

DataSource='FillSectorCBList("WK.002")'

请注意,您无法同时设置DataSource和DataSourceID属性。您可能还需要手动执行.DataBind()。