0

typed DataSets用于访问数据,通过配置它们(教程DataSet Designer中解释了一般思想)。

对于每个表GetData(),首先会自动创建一个方法。它返回DataTable与数据库中的基础表具有相同模式(即列)的 a。如果现在我使用选项创建一个自定义方法'Add query',它应该只返回部分数据(比如六列中的三列),自动生成的方法返回的 DataTable 仍然包含六列,而其中三列不包含数据。

这有一个烦人的副作用,DataTable例如当我将它绑定到 GridView(显然使用 ObjectDataSource)时,这些空列GridView也会出现在其中,所以我必须手动删除它们。

另一个相关的问题是,如果我将来自另一个表的数据添加到相应的SQL-query列(例如使用内部连接或子查询),相反这些列不会被添加到 GridView,尽管我可以在Boundfield.

因此,如果这里有人尚未完全迁移到实体框架并且可以解释这种行为并帮助克服这些问题,我将非常感谢您的回答。先感谢您。

更新:

我的期望是找到DataTable从我的 SQL 查询之上的数据集设计器创建的 get 方法中获取 a 的方法,这将在其架构中反映此查询的结果。在教程中,他们说该GetData()方法为您创建并填充 DataTable 并将其作为方法的返回值返回。如此直观地为什么不使用匹配的字段创建一个新表。

所以我希望我做错了什么。或者我的期望是错误的,但是有人可以解释我,为什么。

4

2 回答 2

0

我没有尝试过,但我想您可以通过将数据表结果转换为另一种已知类型并相应地绑定网格来解决这些问题。(我知道这没什么意义,请耐心等待......)

举个例子(尽管有一个无类型的数据集):

编辑 - 为您换成 C#:

EDIT2 - 哇,在线转换器让我大失所望 - 重新输入所以它现在实际上会编译

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

public class myView 
{ 
    public string OrderNumber { get; set; } 
    public int Quantity { get; set; } 
    public decimal PricePerUnit { get; set; } 
    public decimal TotalPrice { get; set; } 
}

public void SO9(System.Data.DataTable mockTypedDatatable)
{
    IEnumerable<myView> results = mockTypedDatatable.AsEnumerable().Select(n => new myView {    
                OrderNumber = Convert.ToString(n["OrderNumber"]),    
                Quantity = Convert.ToInt32(n["Quantity"]),    
                PricePerUnit = Convert.ToDecimal(n["Price"])});
    results.ToList().ForEach(x => x.TotalPrice = x.Quantity * x.PricePerUnit);
    myGridView.DataSource = results;      
    myGridView.DataBind();
}

在示例中,我将假数据表中的列分配给某些属性,而其他属性通过其他方式填充(在示例中,简单地乘以 Quanty * Price,但您可以轻松地扩展它)。

希望有帮助

于 2011-07-06T09:44:44.850 回答
0

好的,我可以说我已经找到了解决方法。

解释是相应的 TableAdapter 通过它的任何 GetData() 方法(包括自定义方法,如 GetReducedSetOfData())创建和返回,而不仅仅是一个通用的 DataTable,而是精确类型的 DataTable(例如,在我的例子中是 CarSetsDataTable)。也许这正是我忽略的强类型数据集的本质。

在我看来,解决方案很简单。您不必在现有 DataAdapter 中创建新的自定义方法,将可能修改过的数据模式作为返回值,而是为同一个 db 表创建其他 DataAdapter,这将完全返回您需要的其他自定义 SQL 查询的结果。默认 GetData() 方法。

我不知道创建许多 DataAdapter 是否会产生任何副作用,但它似乎是一种安全的方法,可以以最小的努力从类型化的 DataSet 中准确获取所需的数据。

于 2011-07-06T12:06:24.760 回答