2010-04-29 51 views
0

在我的網站項目中,我有一些aspx頁面,JavaScript文件和一個我稱爲MyCustomReport的自定義C#類。我在SelectionReport.aspx中放置了一個ID爲Image1的圖像框。我需要訪問MyCustomReport.cs中的Image1,以便根據條件打開和關閉它。我需要什麼代碼來做到這一點?謝謝大家在不同的文件中訪問webcontrol的C#語法(aspx)

+0

只是爲了記錄,這聽起來像一個非常奇怪的設計。 – R0MANARMY 2010-04-29 14:48:28

+0

這聽起來不太對,您的報告爲什麼會改變您的網頁?你不能在同一時間渲染你的報告和網頁。 – 2010-04-29 14:49:56

+0

爲什麼?爲什麼這很奇怪? – Josh 2010-04-29 14:50:47

回答

2

您需要將Image控件的實例傳遞給MyCustomReport。從那裏您可以將其設置爲Visible財產至truefalse

大概是這樣的

public partial class SelectionReport : Page 
{ 
    // your code here 

    protected void Page_Load(object sender, EventArgs e){ 
     MyCustomReport myCustomReport = new MyCustomReport(); 
     myCustomReport.MyReport(Image1); 
    } 
} 

public class MyCustomReport 
{ 
    public void MyReport(Image arg){ 
     // some more code 
     arg.Visible = false; // or true 
    } 
} 

編輯德里克是正確的,你不需要整個頁面,只是圖像。

+0

嗨Romanarmy-您上面發佈的代碼是否需要進入類似SelectionReport.aspx.cs的內容?我還沒有一個CS類,但可以創建一個。 – Josh 2010-04-29 15:01:05

+0

@Josh:第一堂課是,第二堂課沒有。我只是把它們放在一起來說明一個觀點。你怎麼沒有這樣的課程,當你向項目中添加一個新頁面時,Visual Studio不會爲你生成一個課程? – R0MANARMY 2010-04-29 15:10:11

+0

試圖實現你的代碼,但有一個小問題(我正在學習,對不起)。我創建了一個名爲SelectionReport.aspx.cs的文件並添加了對相應程序集的引用,然後在我的類的頂部聲明它。接下來,我添加了page_load,並在第一行MyCustomReport中的名稱空間是CustomReports,因此我聲明瞭CustomReports.MyCustomReport RP = new CustomReports.MyCustomReport();在第二行我嘗試了RP。但intellisense din't不顯示MyCustomReport或我在這裏尋找錯誤的東西。我錯過了什麼? – Josh 2010-04-29 15:30:33

0

這樣做聽起來有點奇怪。你可以通過控制使用ref關鍵字的類方法,那麼類可以修改它:

doSomething(data, MyUserControl); 

我認爲一個更好的實現將是你的類有一個方法或屬性的頁面可以查詢到打開或關閉控制。

+1

@derek:你爲什麼需要通過引用傳遞它?他只需要改變對象的屬性,而不是改變對象本身。 – R0MANARMY 2010-04-29 14:56:55

+0

要清除事情,MyUserControl將是Image1控件,而不是整個頁面。這將使他能夠訪問該對象來更改其屬性。與傳遞SelectionReport實例相差無幾,只是縮小了發送的引用。 – derek 2010-04-29 15:00:45

+0

同意。基本上你的建議基本上實現了我的第二點,只是使它成爲頁面可以查詢的屬性或方法。我甚至會進一步簡化它:Image1.Visible = MyCustomReport.MyReport(),並讓它返回一個布爾值。 – derek 2010-04-29 15:12:15