选中Form1中dgv1的一行数据中的序列号sn,通过sn 在datatable dt中选择对应sn的数据1,讲选择的数据显示到form2中的dgv2,并且嫩重复查询
时间: 2024-03-12 18:48:41 浏览: 151
好的,那么你可以将查询结果缓存起来,下次查询时先查看缓存是否存在,如果存在就直接从缓存中获取数据,否则再进行查询并将结果存入缓存中,这样就能避免重复查询了。
以下是修改后的代码:
在Form1中,添加一个静态的Dictionary用于缓存查询结果:
```csharp
private static Dictionary<string, DataTable> cache = new Dictionary<string, DataTable>();
```
然后,在查询数据之前,先查看缓存中是否存在对应的数据:
```csharp
string sn = dgv1.SelectedRows[0].Cells["sn"].Value.ToString();
DataTable dtSelected;
if (cache.ContainsKey(sn))
{
dtSelected = cache[sn];
}
else
{
DataRow[] rows = dt.Select("sn = '" + sn + "'");
dtSelected = rows.CopyToDataTable();
cache[sn] = dtSelected;
}
```
接下来,在Form2中,修改LoadData方法,添加一个参数来接收缓存中的数据:
```csharp
public void LoadData(DataTable dtSelected, bool fromCache)
{
if (!fromCache)
{
dgv2.DataSource = dtSelected;
}
else
{
dgv2.DataSource = dtSelected.Copy();
}
}
```
最后,在Form1中调用Form2的LoadData方法时,将是否从缓存中获取数据作为参数传递:
```csharp
Form2 form2 = new Form2();
form2.LoadData(dtSelected, cache.ContainsKey(sn));
form2.ShowDialog();
```
这样,就能够避免重复查询了。当然,这个缓存的实现方式并不是最优的,如果你需要更高性能的缓存,可以考虑使用第三方的缓存库。
阅读全文