TableAdapter 只返回选定的列? (VS2008)

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于TableAdapter 只返回选定的列? (VS2008)的主要内容,如果未能解决你的问题,请参考以下文章

我在 vs 2012 中使用数据集,但在 Designer.cs 中查看 tableadapter 不生成代码

返回列表框中的选定值

TableAdapter 的插入方法不起作用?

无法通过带有 TableAdapter 的视图更新 SQL

pyspark如何根据值添加选定的列

使用 VBA 从 Access 表中将选定的列导入 Excel