簡體   English   中英

C#傳遞信息

[英]C# passing information

對不起提前我試着盡可能地解釋這個....

我有2個asp.net頁面,一個名為membermaster,第二個名為memberdetails。 我創建了一個包含2個函數的類庫

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

我在gridviews第一列添加了一個linkbutton,當點擊它時,它會通過查詢字符串傳遞membergen。 我想做的是我創建的第二個功能

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;
}

試圖嘗試將membergen發送給它並返回結果。 但是一旦我編譯DLL並將其添加到我的項目中,我不確定如何引用此函數來填充單個文本框和標簽的信息。

我想要做的是當用戶單擊gridview上的viewdetails按鈕時,我可以使用我通過查詢字符串傳遞的membergen來通過存儲過程填充頁面,但智能將存儲在DLL中。

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

public DataTable GetMembers(int MEMBERSHIPGEN)

然后,在您的方法中,在您填充DataTable並退出using塊之后,您將執行以下操作:

return table;

這會將DataTable返回到任何調用方法的地方。 所以你的頁面會有這樣的東西:

DataTable table = GetMembers(membershipgen);

因此該頁面將負責:

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

該方法負責:

  • 與數據庫交互

這是朝着“ 關注點分離 ”這一總體目標邁出的良好的第一步,這是一件非常好的事情。 您可以通過始終問自己每個方法,類等應該負責的內容繼續沿着這條路走下去。 例如,您的GetMembers方法還應負責確保傳遞給它的值有效,或者從它返回的值不為null

一種方法可能是構建按鈕,以便它導航到以下行的URL:

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
    }
}

您需要更改GetMembers以返回數據而不是void。 如果您想使用DataTables,您只需將代碼修改為:

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"]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM