2010-03-29 64 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