2010-03-29 69 views
0

我有一個LinqDataSource檢索單個記錄。如何通過代碼隱藏從LinqDataSource獲取記錄值

Protected Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles LinqDataSource1.Selecting 
    Dim BizForSaleDC As New DAL.BizForSaleDataContext 
    e.Result = BizForSaleDC.bt_BizForSale_GetByID(e.WhereParameters("ID")).FirstOrDefault 
End Sub 

我希望能夠使用Page_Load函數檢索所述數據源的值。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    'Get the right usercontrol' 
    Dim ctrl As UserControl 
    Select Case DataBinder.Eval(LINQDATASOURCE_SOMETHING.DataItem, "AdType") 
     Case 1 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 2 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 3 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case 4 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case Else : ctrl = Nothing 
    End Select 

    'set the control to visible' 
    ctrl.Visible = True 
End Sub 

但顯然上面的代碼不工作...我只是想知道如果有一種方法,使其工作。

以下是完整的標記

<body> 
    <form id="form1" runat="server"> 
    <asp:LinqDataSource ID="LinqDataSource1" runat="server"> 
     <WhereParameters> 
      <asp:QueryStringParameter ConvertEmptyStringToNull="true" Name="ID" QueryStringField="ID" 
       Type="Int32" /> 
     </WhereParameters> 
    </asp:LinqDataSource> 
    <uc:Default ID="Default1" runat="server" Visible="false" /> 
    <uc:ValuPro ID="ValuPro1" runat="server" Visible="false" /> 
    </form> 
</body> 
</html> 

基本上會發生什麼是適當的用戶控件已啓用,用戶控件繼承的LinqDataSource,並顯示相應的信息。

編輯:它現在正在與下面的代碼工作,但是,因爲我真的沒有在同一信息多次擊中數據庫,我寧願從數據源獲取值。

'Query the database' 
Dim _ID As Integer = Convert.ToInt32(Request.QueryString("ID")) 
Dim BizForSaleDC As New BizForSaleDataContext 
Dim results = BizForSaleDC.bt_BizForSale_GetByID(_ID).FirstOrDefault 

'Get the right usercontrol' 
Dim ctrl As UserControl 
Select Case results.AdType 
    Case 1 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
    Case 2 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
    Case 3 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
    Case 4 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
    Case Else : ctrl = Nothing 
End Select 

編輯2:這似乎是圍繞工作,但我想知道是否有一個更清潔的方式

Private AdType As String 
Private isSold As Boolean 

Protected Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles LinqDataSource1.Selecting 
    Dim BizForSaleDC As New DAL.BizForSaleDataContext 
    e.Result = BizForSaleDC.bt_BizForSale_GetByID(e.WhereParameters("ID")).FirstOrDefault 

    AdType = e.Result.AdType 
    isSold = e.Result.isSold 
End Sub 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

    'Get the right usercontrol' 
    Dim ctrl As UserControl 
    Select Case AdType 
     Case 1 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 2 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 3 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case 4 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case Else : ctrl = Nothing 
    End Select 

    ctrl.Visible = True 
    'Display SOLD if item is sold' 
    ctrl.FindControl("SoldDiv").Visible = isSold 

End Sub 

回答

0

嗯,我不知道是否有更好的答案在那裏,但由於沒有人回答,我認爲這是一種工作,它似乎工作,雖然它不像我認爲應該那樣漂亮。

Private AdType As String ''# a property to store the Ad Type' 
Private isSold As Boolean ''# a property to store whether or not the Ad is sold' 

''# when the linq datasource is activated, it pulls the data out of the db' 
''# and sets the two properties' 
Protected Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles LinqDataSource1.Selecting 
    Dim BizForSaleDC As New DAL.BizForSaleDataContext 
    e.Result = BizForSaleDC.bt_BizForSale_GetByID(e.WhereParameters("ID")).FirstOrDefault 

    AdType = e.Result.AdType 
    isSold = e.Result.isSold 
End Sub 

''# when the page loads, the properties are already set' 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

    ''# Get the right usercontrol' 
    Dim ctrl As UserControl 
    Select Case AdType ''# using the AdType property from above to decide which UserControl to enable' 
     Case 1 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 2 : ctrl = DirectCast(Me.FindControl("Default1"), UserControl) 
     Case 3 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case 4 : ctrl = DirectCast(Me.FindControl("ValuPro1"), UserControl) 
     Case Else : ctrl = Nothing 
    End Select 

    ctrl.Visible = True 
    ''# Display SOLD if item is sold' 
    ctrl.FindControl("SoldDiv").Visible = isSold ''# using the isSold property from above to display the "SOLD" overlay' 

End Sub