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中。
您可能希望您的方法返回一个值。当前返回类型为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
}
}