【问题标题】:TableAdapter to return ONLY selected columns? (VS2008)TableAdapter 只返回选定的列? (VS2008)
【发布时间】:2009-03-30 15:17:18
【问题描述】:

(VS2008) 我正在尝试在 Typed DataSet 中配置 TableAdapter,以仅从它所基于的表的主架构返回特定列的子集,但它始终返回整个架构(所有列)我省略的列中有空白值。

TableAdpater 具有来自向导的默认 Fill 和 GetData() 方法,它们包含表中的每一列,这很好。然后,我添加了一个名为 GetActiveJobsByCustNo(CustNo) 的新参数化查询方法,并且我只在 SQL 查询中包含了我真正希望在此表视图中出现的几列。

但是,它再次返回主表模式中的所有列,而我省略的列的值为空。

我想要这个的原因是,我可以只取回几列,以便在 ASP.NET GridView 中使用带有 AutoGenerateColumns 的表视图。它给了我架构中的每一列,我的演示文稿 GridView 包含更多我想向用户展示的列。而且,我想避免必须在 GridView 中声明列。

【问题讨论】:

    标签: strongly-typed-dataset tableadapter


    【解决方案1】:

    当您将新查询添加到给定的 TableAdapter 时,它将假定它所附加到的架构,这就是您获得不需要的列的空白值的原因。

    既然您提到已经创建了过程,您需要做的是使用服务器资源管理器连接到数据库,然后简单地将存储过程拖到您的 XSD 工作区中。这将做的是创建一个单独的 QueryAdapter,它将只包含您指定的列(仍然是强类型),您可以使用该 QueryAdapter 与您的 GridView 绑定/交互。

    【讨论】:

    • 这里没有存储过程。除了默认的之外,我还添加了另一个 TableAdapter 定义。
    • 明白了。 QueryAdapter 是否允许您在设置时指定现有的 TableAdapter/DataTable?我认为这仍然是最好的选择。
    【解决方案2】:

    在返回表中所有行的另一个查询中是否使用了强类型数据集?

    您可以做的是使用强类型数据集创建一个数据视图,并为您的 DataGridView 公开一个数据表。

    我不确定你的要求是什么,但这个例子应该可以帮助你:

    DataView dv = new DataView(ds.<Your_Table>);
    
    // This will create a new data table with the same name,
    // But with only two columns from the original table.
    // This could then be bound to your data grid. 
    DataTable dt = dv.ToTable(false,
                              ds.<Your_Table>.<Your_Column1Column>.ColumnName,
                              ds.<Your_Table>.<Your_Column1Column>.ColumnName);
    

    【讨论】:

    • “创建数据视图”是什么意思?这就是我试图通过添加一个名为 GetCustomersWithOpenOrders(CustNo) 的新自定义 TableAdapeter 来做的事情
    【解决方案3】:

    在绑定到 Gridview 之前,只需在运行时删除不需要的列。底层的类毕竟还是一个 DataTable。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多