2012-01-04 118 views
0

對不起,我會嘗試和儘可能最好的解釋...C#傳遞信息

我有2個asp.net頁面一個名爲membermaster和第二個命名memberdetails。我創建了一個類庫,它包含兩個功能

我的第一個函數返回根據搜索結果列表...

我添加一個LinkBut​​ton到GridView的第一列,當點擊它通過查詢字符串membershipgen。我想做的事就是我的第二個功能我創造了這個

public DataTable GetMembers(int MEMBERSHIPGEN) 
{ 
    DataTable table = null; 
    SqlConnection con = null; 
    SqlCommand cmd = null; 
    SqlDataAdapter ad = null; 
    SqlParameter prm = null; 
    try 
    { 
     table = new DataTable(); 
    using (con = new SqlConnection(connectionString)) 
    { 
     using (cmd = new SqlCommand("usp_getmemberdetail", con)) 
     { 
      using (ad = new SqlDataAdapter(cmd)) 
      { 
       prm = new SqlParameter("@MEMBERSHIPGEN", SqlDbType.Int); 
       prm.Value = MEMBERSHIPGEN; 
       cmd.Parameters.Add(prm); 
       ad.Fill(table); 
      } 

     } 
    } 
    } 
    catch (Exception ex) 
    { 
     //write your exception code here 
    } 
    return table; 
} 

在試圖嘗試併發送membershipgen到這一點,它返回的結果。但是,一旦我編譯DLL並將其添加到我的項目中,我不知道我將如何引用此函數來填充單個文本框和標籤的信息。

我想要做的是當用戶點擊gridview上的viewdetails按鈕時,我可以使用我通過querystring傳遞的membershipgen來通過存儲過程填充頁面,但智能將存儲在DLL中。去

+0

有點過主題,但是你的'SqlConnection'也應該封裝在'using'塊中。 – 2012-01-04 20:46:47

+0

當你說不知道如何引用..?你稱爲GetMembers()方法是否意味着熱?這是非常簡單的完成也是你使用命名空間來命名你的命名空間內每個類..?如果你不確定粘貼兩個.cs文件的小樣本,我可以爲你更新標題。 – MethodMan 2012-01-04 20:47:15

+0

你的問題是,一旦GetMembers超出範圍,表被銷燬,這是你的結果。您需要將方法簽名從void更改爲某些內容,可能是DataTable,或者不是填充局部變量,而是填充成員/類變量。 – billinkc 2012-01-04 20:49:57

回答

0

您需要更改GetMembers返回數據而不是void。如果你想使用數據表,你可以修改代碼以這樣的:

public DataTable GetMembers(int MEMBERSHIPGEN) 
{ 
    DataTable table = new DataTable(); 
    SqlConnection con = new SqlConnection(connectionString); 

    using (SqlCommand cmd = new SqlCommand("usp_getmemberdetail", con)) 
    { 
     using (SqlDataAdapter ad = new SqlDataAdapter(cmd)) 
     { 
      SqlParameter prm = new SqlParameter("@MEMBERSHIPGEN", SqlDbType.Int); 
      prm.Value = MEMBERSHIPGEN; 
      cmd.Parameters.Add(prm); 
      ad.Fill(table); 
      return table; 
     } 

然後在你的Page_Load它可能是這樣的(比這個更強大的希望):

{ 
    DataTable table = yourDll.GetMembers(Convert.ToInt32(Request.QueryString["membership"])); 
    label1.Text = Convert.ToString(table.rows[0]["Name"]); 
} 
0

一種方式是構建按鈕,以便導航到一起的線網址:

http://localhost/DetailPage.aspx?membershipgen=4

然後在DetailPage.aspx的負荷:

Page_Load(Object sender, EventArgs e) 
{ 
    if (!this.IsPostback) 
    { 
     int membershipgen;   

     if (int.TryParse(Request.QueryString["membershipgen"], out membershipgen) 
     { 
      //Get the data (replace DataAccess with the name of your data access class). 
      //Also, you probably want to change GetMembers so it returns the data. 
      DataTable table = DataAccess.GetMembers(membershipgen); 

      //TODO: Display the results 
     } 
    } 
    else 
    { 
     //Display an error 
    } 
} 
2

你可能希望你的方法返回一個值。目前返回類型爲void,因此它在內部填充的值在調用堆棧離開方法時就會消失。這聽起來像你想是這樣的:

public DataTable GetMembers(int MEMBERSHIPGEN) 

然後,在你的方法,你已經填充DataTable和退出using塊之後,你會做這樣的事情:

return table; 

這將使DataTable返回到所謂的方法。所以,你的網頁將有這樣的事情:

DataTable table = GetMembers(membershipgen); 

所以該網頁將負責:

  • 從輸入(查詢字符串)獲取membershipgen
  • 調用該方法,並獲得方法的結果
  • 顯示方法的結果(綁定到網格?或者您正在做什麼來顯示數據)

而且方法負責:

  • 互動與數據庫

這是朝着「separation of concerns」,這是一件非常好的事情總目標的第一步。你可以繼續沿着這條路走下去,總是問自己應該爲什麼每個方法,類別等負責。例如,您的GetMembers方法也應該負責確保傳遞給它的值有效,或者從它返回的值不是null

+0

感謝您的響應我繼續前進,並作出了這些更改但是,我仍然有點不好意思,如何將membershipgen傳遞給我創建的DLL中的方法,以及如何從我的數據表中檢索結果,並填充單個文本框結果。任何幫助,將不勝感激另外,感謝您發佈的鏈接將閱讀,今晚當我回家... – Tim 2012-01-04 21:15:35

+0

@JawaidAkhtar:這聽起來像你會想要開始一些教程和步行。你現在談論的內容有點超出了問題的範圍,並且與一般的教學和指導接近,這對一些評論來說並不容易。例如,您可以開始一個關於如何將值存入方法的新問題。這是一個初學者的問題,但如果它呈現良好,那很好。價值從哪裏來?它如何發送到頁面?從那裏,我們可以告訴你如何將它發送到方法。等等。 – David 2012-01-05 00:51:07