我正在编写连接到本地Access数据库的WPF应用程序。在其中一个应用程序屏幕中,一个表格数据(名为Service)显示在单个文本框中,如表单,用户可以浏览记录,创建新记录,删除,编辑或搜索。一切都在同一张桌子上完成。
在深入研究如何浏览文本框中显示的记录之后,我最终使用了DataSet和CollectionView。
public partial class Entries : Window
{
AgendaDataSet agendaDataSet = new AgendaDataSet();
AgendaDataSetTableAdapters.ServiceTableAdapter serviceAdapter = new AgendaDataSetTableAdapters.ServiceTableAdapter();
CollectionView workSheetView;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.serviceAdapter.FillByDateAsc(agendaDataSet.Service);
this.DataContext = agendaDataSet.Service;
this.workSheetView = (CollectionView)CollectionViewSource.GetDefaultView(agendaDataSet.Service);
this.workSheetView.MoveCurrentToLast();
}
我使用CollectionView方法MoveCurrentToFirst(),MoveCurrentToNext()等进行记录导航。我还可以创建新记录,编辑和删除。
这是我用来创建新记录的方法:
private void btnNovo_Click(object sender, RoutedEventArgs e)
{
dynamic row = this.agendaDataSet.Service.NewMainRow();
this.agendaDataSet.Service.AddMainRow(row);
this.workSheetView.MoveCurrentToLast();
}
我的问题是记录搜索。我有一个按钮,当用户按下它时,它会询问他正在搜索的PatientName。然后,有关该患者的数据必须出现在各种文本框中,随时可以查阅,编辑或删除。
通过CollectionView,我只找到了GetItemAt()方法,该方法根据它的行索引获取记录。由于我正在使用Access数据库,因此我无法使用谓词ROW_NUMBER。而且我不认为这种方法是最好的。
那么,我如何根据它的ID,PatientName或任何其他字段获取项目,并将其作为一行传递给CollectionView?
答案 0 :(得分:0)
您可能不需要根据其ID或PatientName属性获取项目。
假设用户寻找" Andrew"作为PatientName。您的代码发现DataTable
的第二行(称为"服务")是用户正在寻找的那一行。
您可以使用简单的静态方法来查找DataRowView
,如下所示:
private static DataRowView FindDataRowView(DataView dataView, DataRow dataRow)
{
foreach (DataRowView dataRowView in dataView)
{
if (dataRowView.Row == dataRow)
{
return dataRowView;
}
}
return null;
}
然后您可以在CollectionView中选择对象:
collectionView.MoveCurrentTo(FindDataRowView(agendaDataSet.Service.DefaultView,
agendaDataSet.Service.Rows[2]));
当然,您可以使用foreach周期或DataRow
的{{1}}方法找到真实的Select
索引。