C#传递信息

时间:2012-01-04 20:43:12

标签: c# tsql webforms

对不起,我要尽量尽量解释一下......

我有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中。 / p>

3 个答案:

答案 0 :(得分:2)

您可能希望自己的方法返回一个值。目前返回类型为void,因此当调用堆栈离开方法时,它内部填充的值就会消失。听起来你想要这样的东西:

public DataTable GetMembers(int MEMBERSHIPGEN)

然后,在您的方法中,在填充DataTable并退出using块后,您将执行以下操作:

return table;

这会将DataTable返回给所谓的方法。所以你的页面会有这样的东西:

DataTable table = GetMembers(membershipgen);

因此页面将负责:

  • 从输入中获取membershipgen值(查询字符串)
  • 调用方法并获取方法的结果
  • 显示方法的结果(绑定到网格?或者你正在做什么来显示数据)

该方法负责:

  • 与数据库交互

这是迈向“separation of concerns”总体目标的良好开端,这是一件非常好的事情。您可以通过始终问自己应该负责的每个方法,类等等,继续沿着这条路走下去。例如,您的GetMembers方法也应该负责确保传递给它的值有效,或者从它返回的值不是null

答案 1 :(得分: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 :(得分:0)

您需要更改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"]);
}