对不起,我要尽量尽量解释一下......
我有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>
答案 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"]);
}