根据 3 层应用程序中的下拉列表填充文本框
Populate Text boxes based on drop down list in 3 tier application
我想根据下拉列表中的选择用值填充我的文本框。
DAL:
public static string GetTicket(collection b)
{
try
{
string returnValue = string.Empty;
DB = Connect();
DBCommand = connection.Procedure("getTicket");
DB.AddInParameter(DBCommand, "@SupportRef", DbType.String, b.SupportRef1);
var myReader = DBCommand.ExecuteReader();
while (myReader.Read())
{
returnValue = myReader.GetString(0);
}
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
BLL:
public string returnTicket(collection b)
{
try
{
string ticket = DAL.data.GetTicket(b);
return ticket;
}
catch (Exception ex)
{
throw ex;
}
}
PL:
protected void ddl_Customers_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = ddl_Customers.SelectedValue.ToString();
//populate the text boxes
txtSupportRef.Text = bobj.returnTicket(selectedValue);
}
我的存储过程有一个名为 SupportRef 的变量,它需要一个值才能 return 结果。
我收到以下错误:
The best overloaded method match for 'BLL.business.returnTicket(DAL.collection)'
has some invalid arguments
和
Argument 1: cannot convert from 'string' to 'DAL.collection'
是的,您正试图从表单中将字符串值传递给业务层方法 returnTicket(collection b)。但是在此业务层方法 returnTicket(collection b) 签名中具有要接受的集合类型参数。
从下拉列表中选择值后,所选值将存储在字符串变量中。
请将BLL和DAL的方法的集合类型改为字符串类型。
此更改将解决上述错误。
您需要将 string
类型参数传递给 returnTicket of BLL
和 GetTicket of DAL
。像这样更改您的方法
BLL
public string returnTicket(string supportRef)
{
try
{
string ticket = DAL.data.GetTicket(supportRef);
return ticket;
}
catch (Exception ex)
{
throw ex;
}
}
DAL
public static string GetTicket(string supportRef)
{
try
{
string returnValue = string.Empty;
DB = Connect();
DBCommand = connection.Procedure("getTicket");
DB.AddInParameter(DBCommand, "@SupportRef", DbType.String, supportRef);
var myReader = DBCommand.ExecuteReader();
while (myReader.Read())
{
returnValue = myReader.GetString(0);
}
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
}
您正在从表示层传递一个字符串。尝试在表示层中传递 collection
。
简答
在您的表示层中,将 string
类型映射到 DAL.collection
类型。 You can see this here.
protected void ddl_Customers_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = ddl_Customers.SelectedValue.ToString();
// map the string to a DAL.collection
var collection = new DAL.collection();
collection.SupportRef1 = selectedValue;
//populate the text boxes
txtSupportRef.Text = bobj.returnTicket(collection);
}
说明
这两个错误都是编译错误。可以看到一个recreation of them both in this fiddle.
错误 1
The best overloaded method match for 'BLL.business.returnTicket(DAL.collection)' has some invalid arguments
编译器正试图找到一个名为 BLL.business.returnTicket
的方法,该方法采用单个参数。在找到的匹配项中,该方法采用单个 DAL.collection
参数。您传递给它的是 string
,这是一个无效参数,因为 string
不是 DAL.collection
。 From MSDN:
Overload resolution is a compile-time mechanism for selecting the best function member to invoke given an argument list and a set of candidate function members.
错误 2
Argument 1: cannot convert from 'string' to 'DAL.collection'
由于 BLL.business.returnTicket
采用 DAL.collection
参数,编译器会尝试将 string
转换为 DAL.collection
。它失败是因为没有从 string
类型到 DAL.collection
类型的 隐式转换 。 From MSDN:
Implicit conversions: No special syntax is required because the conversion is type safe and no data will be lost.
怎么办?
您可以采用几种方法,按复杂程度排序。
在您的表示层中,将 string
类型映射到 DAL.collection
类型。推荐。
在您的业务层中,除了现有方法重载之外,创建一个新的 returnTicket(string)
方法重载,它将 string
映射到 DAL.collection
class。推荐。
将 returnTicket(DAL.collection)
和 GetTicket(DAL.collection)
都更改为 string
而不是 DAL.collection
。这有两个缺点:它会破坏当前使用 DAL.collection
参数调用这些方法的其他代码,并且它需要在两种不同的方法中更改四行代码。
创建一个从 string
到 DAL.collection.
的 user-defined conversion 缺点:这可能有点矫枉过正。
推荐的活动
在您的表示层中,将 string
类型转换或映射到 DAL.collection
类型。这就是上面的简短回答所完成的。
或者,在您的业务层中,创建一个新的 returnTicket(string)
方法重载,除了 现有方法。它看起来像这样。
public string returnTicket(collection b)
{
// map the string to a DAL.collection
var collection = new DAL.collection();
collection.SupportRef1 = selectedValue;
// call the existing method that takes a DAL.collection
returnTicket(b);
}
我想根据下拉列表中的选择用值填充我的文本框。
DAL:
public static string GetTicket(collection b)
{
try
{
string returnValue = string.Empty;
DB = Connect();
DBCommand = connection.Procedure("getTicket");
DB.AddInParameter(DBCommand, "@SupportRef", DbType.String, b.SupportRef1);
var myReader = DBCommand.ExecuteReader();
while (myReader.Read())
{
returnValue = myReader.GetString(0);
}
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
BLL:
public string returnTicket(collection b)
{
try
{
string ticket = DAL.data.GetTicket(b);
return ticket;
}
catch (Exception ex)
{
throw ex;
}
}
PL:
protected void ddl_Customers_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = ddl_Customers.SelectedValue.ToString();
//populate the text boxes
txtSupportRef.Text = bobj.returnTicket(selectedValue);
}
我的存储过程有一个名为 SupportRef 的变量,它需要一个值才能 return 结果。
我收到以下错误:
The best overloaded method match for 'BLL.business.returnTicket(DAL.collection)'
has some invalid arguments
和
Argument 1: cannot convert from 'string' to 'DAL.collection'
是的,您正试图从表单中将字符串值传递给业务层方法 returnTicket(collection b)。但是在此业务层方法 returnTicket(collection b) 签名中具有要接受的集合类型参数。 从下拉列表中选择值后,所选值将存储在字符串变量中。 请将BLL和DAL的方法的集合类型改为字符串类型。 此更改将解决上述错误。
您需要将 string
类型参数传递给 returnTicket of BLL
和 GetTicket of DAL
。像这样更改您的方法
BLL
public string returnTicket(string supportRef)
{
try
{
string ticket = DAL.data.GetTicket(supportRef);
return ticket;
}
catch (Exception ex)
{
throw ex;
}
}
DAL
public static string GetTicket(string supportRef)
{
try
{
string returnValue = string.Empty;
DB = Connect();
DBCommand = connection.Procedure("getTicket");
DB.AddInParameter(DBCommand, "@SupportRef", DbType.String, supportRef);
var myReader = DBCommand.ExecuteReader();
while (myReader.Read())
{
returnValue = myReader.GetString(0);
}
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
}
您正在从表示层传递一个字符串。尝试在表示层中传递 collection
。
简答
在您的表示层中,将 string
类型映射到 DAL.collection
类型。 You can see this here.
protected void ddl_Customers_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = ddl_Customers.SelectedValue.ToString();
// map the string to a DAL.collection
var collection = new DAL.collection();
collection.SupportRef1 = selectedValue;
//populate the text boxes
txtSupportRef.Text = bobj.returnTicket(collection);
}
说明
这两个错误都是编译错误。可以看到一个recreation of them both in this fiddle.
错误 1
The best overloaded method match for 'BLL.business.returnTicket(DAL.collection)' has some invalid arguments
编译器正试图找到一个名为 BLL.business.returnTicket
的方法,该方法采用单个参数。在找到的匹配项中,该方法采用单个 DAL.collection
参数。您传递给它的是 string
,这是一个无效参数,因为 string
不是 DAL.collection
。 From MSDN:
Overload resolution is a compile-time mechanism for selecting the best function member to invoke given an argument list and a set of candidate function members.
错误 2
Argument 1: cannot convert from 'string' to 'DAL.collection'
由于 BLL.business.returnTicket
采用 DAL.collection
参数,编译器会尝试将 string
转换为 DAL.collection
。它失败是因为没有从 string
类型到 DAL.collection
类型的 隐式转换 。 From MSDN:
Implicit conversions: No special syntax is required because the conversion is type safe and no data will be lost.
怎么办?
您可以采用几种方法,按复杂程度排序。
在您的表示层中,将
string
类型映射到DAL.collection
类型。推荐。在您的业务层中,除了现有方法重载之外,创建一个新的
returnTicket(string)
方法重载,它将string
映射到DAL.collection
class。推荐。将
returnTicket(DAL.collection)
和GetTicket(DAL.collection)
都更改为string
而不是DAL.collection
。这有两个缺点:它会破坏当前使用DAL.collection
参数调用这些方法的其他代码,并且它需要在两种不同的方法中更改四行代码。创建一个从
string
到DAL.collection.
的 user-defined conversion 缺点:这可能有点矫枉过正。
推荐的活动
在您的表示层中,将 string
类型转换或映射到 DAL.collection
类型。这就是上面的简短回答所完成的。
或者,在您的业务层中,创建一个新的 returnTicket(string)
方法重载,除了 现有方法。它看起来像这样。
public string returnTicket(collection b)
{
// map the string to a DAL.collection
var collection = new DAL.collection();
collection.SupportRef1 = selectedValue;
// call the existing method that takes a DAL.collection
returnTicket(b);
}