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)的主要内容,如果未能解决你的问题,请参考以下文章