C#传递信息

本文关键字:信息 | 更新日期: 2023-09-27 18:19:38

很抱歉,我会尽力解释。。。。

我有两个asp.net页面,一个名为membermaster,第二个名为memberdetails。我创建了一个类库,其中包含2个函数

我的第一个函数根据搜索结果返回一个列表。。。

我在gridviews的第一列中添加了一个链接按钮,当单击它时,它会通过querystring传递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发送给this时,它会返回结果。但一旦我编译了DLL并将其添加到我的项目中,我就不确定如何引用这个函数来用信息填充各个文本框和标签。

我想做的是,当用户单击gridview上的viewdetails按钮时,我可以使用我通过querystring传递的membershipgen通过存储过程填充页面,但智能将存储在DLL中。

C#传递信息

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

public DataTable GetMembers(int MEMBERSHIPGEN)

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

return table;

这将把DataTable返回给调用该方法的任何对象。所以你的页面会有这样的内容:

DataTable table = GetMembers(membershipgen);

因此该页面将负责:

  • 从输入中获取membershipgen值(查询字符串)
  • 调用方法并获取方法的结果
  • 显示方法的结果(绑定到网格?或显示数据的任何操作)

该方法负责:

  • 与数据库交互

这是朝着"关注点分离"的总体目标迈出的第一步,这是一件非常好的事情。你可以一直问自己每个方法、类等应该负责什么,以此继续前进。例如,GetMembers方法还应该负责确保传递给它的值是有效的,或者从它返回的值不是null

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

一种方法可能是构造按钮,使其沿着以下行导航到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
    }
}