如何在这种情况下正确创建BLL和GridView

时间:2012-12-24 08:12:28

标签: asp.net gridview data-access-layer bll

我设计了一个数据库,为了更好地展示我的问题,我简化了它:

TB: CONSULTANTS

      ID        uniqueidentifier

      NAME      NVARCHAR(30)

TB: EXPENSES

      ID                uniqueidentifier

      AMOUNT            money

      CONSULTANTID      uniqueidentifier

顾问表是顾问表的FK,对吧?

我创建了一个包含两个数据表的数据集,这些数据表是顾问和费用

使用相应的查询,例如通过顾问ID等获取费用

然而,我想在网格视图中显示的是:

金额&顾问的名称而不是顾问ID


当我尝试使用(ExpenseId,Amount,ConsultantName)返回数据表时,它会导致错误,因为架构与基础数据表EXPENSES(ExpenseId,Amount,ConsultantId)不匹配。

我可以从BLL获取(ExpenseId,Amount,ConsultantName(非id))


我是否必须创建另一个数据表并将两个表连接在一起?因为ASP.NET网站说这不是创建DAL和BLL的首选方法

或者是我可以在gridview的BoundField上做一些更改(如果可能的话,如何将两个不同的适配器的输出绑定在一起)。

2 个答案:

答案 0 :(得分:0)

我从ASP.NET站点示例中找到了答案


在我们创建BLL之前,我们必须弄清楚每个表适配器中需要什么。

因此,在我的情况下,我必须使用复合SELECT语句将consultantName列和其他所需列包含在Expenses数据表中。

即,

从费用中选择支出,金额,顾问,(从顾问那里选择咨询顾问。顾客。费用。消费税)

然后我们可以设法从此DAL获取所有必需的数据。

答案 1 :(得分:0)

好吧,您可以在DAL中创建一个方法,从数据库中提取数据并根据您的需要返回DataTable or DataSet

Select c.id as ConsultantId,c.Name as Name,e.amount
from consultant c
inner join experses e
on c.ConsultantId=e.ConsultantId

让你的BAL做商务逻辑,例如创建Consultant Class对象Array并对金额进行验证(例如金额不能小于0)。

BAL返回可用于与数据控件绑定的Consultant对象数组(或者您甚至可以从BAL发回dataTable)。

我认为Linq正在使用第一种方法,它从Linq语法生成sql脚本,并返回特定类型对象的绑定。