2012-01-04 97 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