Frage

I am currently developing a solution that uses YUI grids. My problem is that my home page is a summary of all my other pages, it includes a summary grid of the grids displayed on other pages, and I dont want to reuse the same code in each page's code behind. Im trying to centralize it. So what I have done is I have made <asp:Placeholders id="LoadOpenPurchasesGridDataPlaceholder" runat="server"> where I write a JSON string into, on the home page and the Open Purchases Page. However, because I want to share the sub procedure across all pages, I have made it public shared, but it gives an error: cannot refer to an instance member of a class from within a shared method or shared member.

Now if I want to response.write to a page from a different code begind I use HttpContext.Current.Response.Write(). Is there a similar way of accessing the page's HTML controls from where I am calling it. (I have tried to explain it in detail, sorry for confusion caused.)

My Code:

Shared Sub LoadOpenPurchasesGrid(ByVal Location As String, ByVal Coop As String, ByVal Commodity As String, ByVal Financed As String, ByVal Season As String, ByVal Trader As String, ByVal Department As String, ByVal Database As String)
    Try
        Dim ReturnString As String = Nothing
        If Location = "0" And Coop = "0" And Commodity = "0" And Season = "0" And Trader = "0" Then
             ReturnString = (LoadOpenPurchasesGridData("", "", "", "", "", Department, Database))
             Dim LoadGridDataContainer As New HtmlGenericControl("input")
             LoadGridDataContainer.ID = "hdnOpenPurchasesGridData"
             LoadGridDataContainer.Attributes.Add("type", "hidden")
             LoadGridDataContainer.Attributes.Add("value", ReturnString)
             LoadOpenPurchasesGridDataPlaceholder.Controls.Add(LoadGridDataContainer)
        Else
             ReturnString = (LoadOpenPurchasesGridData(Location, Coop, Commodity, Season, Trader, Department, Database))
             HttpContext.Current.Response.Write(ReturnString)
        End If
        HttpContext.Current.Response.Write(ex.message)
    End Try
End Sub

War es hilfreich?

Lösung

I have found the answer to my question. Instead of trying to reference the placeholder directly from the calling method, I rather pass the placeholder as a method parameter, and I send it from the calling method as Me.PlaceholderID.

' Public Shared Sub LoadOpenPurchasesGridData(ByRef Placeholder As Object, ByVal Location As String, ByVal Coop As String, ByVal Commodity As String, ByVal Season As String, ByVal Trader As String, ByVal SearchCriteria As String, ByVal Department As String, ByVal Database As String, ByVal InitialLoad As Boolean)
        Dim SqlConnection As New SqlConnection
        Dim SqlCommand As New SqlCommand
        Dim SqlParameter As New List(Of SqlParameter)
        Dim SqlReader As SqlDataReader = Nothing
        Dim ReturnString = "["
        Dim Counter As Integer = 1
        Try
            SqlConnection = CreateDatabaseConnection(ConnectionString)
            AddSqlParameterToCollection(SqlParameter, "@Location", Location)
            AddSqlParameterToCollection(SqlParameter, "@Coop", Coop)
            AddSqlParameterToCollection(SqlParameter, "@Commodity", Commodity)
            AddSqlParameterToCollection(SqlParameter, "@Season", Season)
            AddSqlParameterToCollection(SqlParameter, "@Trader", Trader)
            AddSqlParameterToCollection(SqlParameter, "@Search", SearchCriteria)
            AddSqlParameterToCollection(SqlParameter, "@Database", Database)
            SqlCommand = CreateSqlCommand("[proc_Dynamic_GetPOC]", SqlConnection, SqlParameter)
            SqlReader = SqlCommand.ExecuteReader()
            If SqlReader.HasRows Then
                Do While SqlReader.Read And Counter < 200
                    If Counter <> 1 Then
                        ReturnString += ","
                    End If
                    ReturnString += "{""PrimCont"":""" & SqlReader("PrimCont") & ""","
                    ReturnString += """PSCM_COOP_ID"":""" & SqlReader("PSCM_COOP_ID") & ""","
                    ReturnString += """POCNumber"":""" & SqlReader("POCNumber") & ""","
                    ReturnString += """VENDORID"":""" & SqlReader("VENDORID") & ""","
                    ReturnString += """VendorContract"":""" & SqlReader("VendorContract") & ""","
                    ReturnString += """ITMCLSDC"":""" & SqlReader("ITMCLSDC") & ""","
                    ReturnString += """CommodityGrade"":""" & SqlReader("CommodityGrade") & ""","
                    ReturnString += """ContractQty"":""" & SqlReader("ContractQty") & ""","
                    ReturnString += """LIQty"":""" & SqlReader("LIQty") & ""","
                    ReturnString += """TonsNotFinalized"":""" & SqlReader("TonsNotFinalized") & ""","
                    ReturnString += """POC_DEL_QTY"":""" & SqlReader("POC_DEL_QTY") & ""","
                    ReturnString += """OpenQty"":""" & SqlReader("OpenQty") & ""","
                    ReturnString += """ContractPrice"":""" & SqlReader("ContractPrice") & ""","
                    ReturnString += """PurchaseBasis"":""" & SqlReader("PurchaseBasis") & ""","
                    ReturnString += """Safex Month"":""" & SqlReader("Safex Month") & ""","
                    ReturnString += """SpreadToSafexMonth"":""" & SqlReader("SpreadToSafexMonth") & ""","
                    ReturnString += """LOCNDSCR"":""" & SqlReader("LOCNDSCR") & ""","
                    ReturnString += """Area"":""" & SqlReader("Area") & ""","
                    ReturnString += """VesselName"":""" & SqlReader("VesselName") & ""","
                    ReturnString += """DeliveryMonth"":""" & SqlReader("DeliveryMonth") & ""","
                    ReturnString += """SignedContract"":""" & SqlReader("SignedContract") & """}"
                    Counter += 1
                Loop
            End If
            ReturnString += "]"
            Counter = 0
            If InitialLoad = True Then
                Dim LoadGridDataContainer As New HtmlGenericControl("input")
                LoadGridDataContainer.ID = "hdnOpenPurchasesGridData"
                LoadGridDataContainer.Attributes.Add("type", "hidden")
                LoadGridDataContainer.Attributes.Add("value", ReturnString)
                Placeholder.Controls.Add(LoadGridDataContainer)
            Else
                HttpContext.Current.Response.Write(ReturnString)
            End If
        Catch ex As Exception
            HttpContext.Current.Response.Write("<span class=""error_message_span"">ERROR - An error occurred loading the open puchases grid. Please contact the system administrators for assistance.</span>" & ex.Message)
        Finally
            If Not IsNothing(SqlReader) Then
                SqlReader.Close()
                SqlReader = Nothing
            End If
            If Not IsNothing(SqlCommand) Then
                SqlCommand.Dispose()
                SqlCommand = Nothing
            End If
            If Not IsNothing(SqlConnection) Then
                SqlConnection.Close()
                SqlConnection.Dispose()
                SqlConnection = Nothing
            End If
        End Try
    End Sub'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top