2010-05-29 1 views
0

Я пытаюсь передать идентификатор активности (RefNum) в Sub в моем коде. Я знаю, что я должен использовать круглые скобки при передаче параметров подпрограммам и методам, и я пробовал несколько способов и продолжаю получать следующую ошибку:Параметр доступа к подпрограмме в Codebehind

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> 

Code-за:

Sub FillSectorCBList (ByVal RefNum As String, ByVal отправителем As Object, ByVal е Как System.EventArgs) Dim SectorIDs Как Ново 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 

Любой совет будет здорово. Я не уверен, если я даже правильный подход.

Спасибо!

ответ

1

Вы не можете передать параметр методу события OnDataBound. Метод должен следовать определенной сигнатуре. Поскольку этот параметр является по существу программной константой, я бы просто закодировал его в методе или прочитал его откуда-то. Разумеется, вы также можете использовать метод, который обрабатывает событие, просто вызывает другой метод, который принимает ваш параметр.

1

Изменить ваш

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

к

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

Хотя это будет заботиться о Шифр ​​ожидаемой ошибки это, скорее всего, приведет к другому, как Джоэл писал прежде, чем я мог представить.

0

Как и другие, вы не можете использовать событие OnDataBound для этой цели. Вам необходимо установить свойство DataSource на ваш желаемый метод.

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

Имейте в виду, что вы не можете установить DataSource и свойство DataSourceID одновременно. Возможно, вам понадобится выполнить также вручную .DataBind().