从 DataTable/DataSet 中的搜索创建 DataRow
Posted
技术标签:
【中文标题】从 DataTable/DataSet 中的搜索创建 DataRow【英文标题】:Creating a DataRow from a search in a DataTable/DataSet 【发布时间】:2012-06-08 18:33:30 【问题描述】:我在这个数据库访问方面取得了进展......
这是我需要做的:
我有一个在类命名空间中定义的现有 DataSet(因此是一个 DataTable),我正在尝试创建一个允许用户从项目列表中选择的函数,并使用 SelectedItem.Value
( 它包含一个唯一的数据库中的主键)以显示有关所选项目的更多信息。我相信我需要搜索 DataSet 并将其读入类似 DataRow 的内容,以便我可以显示其中的值(有一种方法可以根据列名执行此操作,对吗?)
我只是不知道怎么说“复制/选择主键“partnumber”等于SelectedItem.Value
的行”
【问题讨论】:
你看过'DataTable.Select()'吗:msdn.microsoft.com/en-us/library/h71xaeh0.aspx 我有DataRow[] myRows = queryTable.Select("productsid='" + selectionList.SelectedItem.Value + "'");
,但它返回一个错误,提示找不到列 [prodcutsid],即使这显然是列名之一(除非在这种情况下区分大小写)
【参考方案1】:
常用的方法有3种
使用DataRowCollection.Find 只能在列已定义为主键时使用
var row = table.Rows.Find(SelectedItem.Value)
使用DataTable.Select(String),它使用像字符串一样的过滤器
var rows = table.Select("IdFieldSelectedItem.Value = " + SelectedItem.Value);
var row = rows[0];
使用Linq to Dataset
var row = (from t in table.AsEnumerable()
where t.Field<int>("Id") == SelectedItem.Value
select t).First();
【讨论】:
@Conrad Frix 好的,所以我正确地使用了 Select 方法。但是,我的 DataSet 似乎不包含任何数据。任何想法为什么?我有public partial class Default : System.Web.UI.Page DataSet queryData = new DataSet(); DataTable queryTable = new DataTable();
然后在按钮事件处理程序中,我查询数据库(实际上是一个Web 服务),如:protected void updateTable(oject sender, EventArgs e) queryData = pws.Query...//web service method queryTable = queryData.Tables["parts"]
然后这个函数protected void updateData(object sender, EventArgs e) // as shown in your answer
你什么时候调用 .Select()
也是来自填充数据集的按钮处理程序?
不,.Select() 是从下拉列表的“selectedIndexChanged”处理程序中调用的。我正在显示一个表格,然后希望用户在表格启动后从下拉列表中进行选择。从下拉列表中选择一个项目后,我希望显示更多信息。
好的,所以每次您回帖时,queryData
和 queryTable
都会重新初始化。为了使 DataSet 保持活动状态,您需要做一些事情。通常人们为此使用Session
。例如,将Session["QueryTable"] = queryTable;
添加到您的按钮处理程序,将if(IsPostBack) queryTable = (DataTable)Session["QueryTable"];
添加到您的页面加载。见Persist c# objects across postbacks
太棒了!这解决了我的问题。我想我终于开始理解所有这些数据和绑定的东西了! :-)以上是关于从 DataTable/DataSet 中的搜索创建 DataRow的主要内容,如果未能解决你的问题,请参考以下文章