根据 3 层应用程序中的下拉列表填充文本框

Posted

技术标签:

【中文标题】根据 3 层应用程序中的下拉列表填充文本框【英文标题】:Populate Text boxes based on drop down list in 3 tier application 【发布时间】:2015-06-08 09:44:28 【问题描述】:

我想根据下拉列表中的选择使用值填充我的文本框。

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 的变量,它需要一个值才能返回结果。

我收到以下错误:

The best overloaded method match for 'BLL.business.returnTicket(DAL.collection)' 
has some invalid arguments

Argument 1: cannot convert from 'string' to 'DAL.collection'

【问题讨论】:

你传递的是一个字符串,而不是一个集合对象..? 从表单中我传入一个字符串值 请贴出班级DAL.collection的结构。这样我们就可以帮助您将string 类型转换为DAL.collection 类型。 ***.com/questions/14105265/dropdownlist-datasource/… 【参考方案1】:

是的,您尝试从表单将字符串值传递给业务层方法 returnTicket(collection b)。但在此业务层方法中,returnTicket(collection b) 签名具有要接受的集合类型参数。 从下拉列表中选择值后,所选值将存储在字符串变量中。 请将 BLL 和 DAL 的方法的集合类型更改为字符串类型。 此更改将解决上述错误。

【讨论】:

虽然这确实有效,但它会破坏已经调用 GetTicket(collection b)returnTicket(collection b) 的其他代码。【参考方案2】:

您需要将string 类型参数传递给returnTicket of BLLGetTicket 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;
 


【讨论】:

虽然这确实有效,但它会破坏已经调用 GetTicket(collection b)returnTicket(collection b) 的其他代码。【参考方案3】:

简答

在您的表示层中,将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

“BLL.business.returnTicket(DAL.collection)”的最佳重载方法匹配有一些无效参数

编译器正试图找到一个名为BLL.business.returnTicket 的方法,它接受一个参数。在它找到的匹配中,该方法采用单个 DAL.collection 参数。相反,您传递给它的是 string,这是一个无效的参数,因为 string 不是 DAL.collection。 From MSDN:

重载解析是一种编译时机制,用于在给定参数列表和一组候选函数成员的情况下选择要调用的最佳函数成员。

错误 2

参数 1:无法从 'string' 转换为 'DAL.collection'

由于BLL.business.returnTicket 采用DAL.collection 参数,编译器会尝试将string 转换为DAL.collection。它失败了,因为没有从string 类型到DAL.collection 类型的隐式转换。 From MSDN:

隐式转换:不需要特殊语法,因为转换是类型安全的,不会丢失任何数据。

怎么办?

您可以采用几种方法,按复杂程度排列。

    在表示层中,将string 类型映射到DAL.collection 类型。推荐。

    在您的业务层中,创建一个新的returnTicket(string) 方法重载,除了现有的,它将string 映射到DAL.collection 类。推荐。

    同时更改 returnTicket(DAL.collection)GetTicket(DAL.collection) 以采用 string 而不是 DAL.collection。这有两个缺点:它会破坏当前使用 DAL.collection 参数调用这些方法的其他代码,并且需要在两种不同的方法中更改四行代码。

    string 创建一个user-defined conversion 到DAL.collection. 缺点:这可能是矫枉过正。

推荐的活动

在您的表示层中,将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);

【讨论】:

【参考方案4】:

您正在从表示层传递一个字符串。尝试在表示层传递collection

【讨论】:

以上是关于根据 3 层应用程序中的下拉列表填充文本框的主要内容,如果未能解决你的问题,请参考以下文章

根据下拉值自动填充文本框

CAD中图案填充怎么设间距

根据角度 5 中的条件填充城市下拉列表

根据组合框选择填充文本框

如何根据列表框中的选定行填充多个文本框

从文本框中使用 jquery mobile 填充下拉列表