0

我有两个 GridView。我有GetGeneralDiagnosis返回所有诊断列表的方法:

代码诊断
F50 进食障碍
F51 非器质性睡眠障碍

GetSpecificDiagnosis返回更具体列表的方法:

代码诊断
F50.0 神经性厌食
F50.1 非典型神经性厌食
F51.0 非器质性失眠
F51.1 非器质性嗜睡

现在我有了根据第一个 GridView 的 GENERAL DIAGNOSIS 将 SPECIFIC DIAGNOSIS 绑定到第二个 GridView 的方法。

protected void gvGeneralDiagnosis_SelectedIndexChanged(object sender, EventArgs e)
{
    string generalDiagnosis = gvGeneralDiagnosis.DataKeys[gvGeneralDiagnosis.SelectedIndex].Values["ICD10Code"].ToString(); 
    var ICD10 = Visit.GetSpecificDiagnosis();   // here I'm getting data from database
    gvSpecificDiagnosis.DataSource = ICD10.Where(i => i.ICD10Code.Contains(generalDiagnosis)).Select(i => new { i.ICD10Name, i.ICD10Code });
    gvSpecificDiagnosis.DataBind();
}

每次更改所选索引时,我都不想连接到数据库。

我怎样才能只得到我的清单var ICD10 = Visit.GetSpecificDiagnosis()一次?我听说全局变量是一个非常糟糕的主意,那么我该如何以另一种方式做到这一点?

4

3 回答 3

1

您可以让您的Visit类缓存返回的数据。

GetSpecificDiagnosis被调用时,它将检查该数据是否已经从数据库中检索到,如果是则返回。如果不是,它将从数据库中检索它并将其保存到其缓存中。

您应该注意的一件事是这些数据是静态的(即在应用程序的整个生命周期中永远不会改变)还是动态的。在第一种情况下,您不必进行任何特殊处理,但如果是后者,则必须使缓存无效,因为数据库中的信息已更改。

我建议您在这里查看如何开始使用 ASP.NET 中的缓存。

于 2012-07-28T16:02:01.237 回答
1

您可以使用私有成员变量。只要包含它的类存在,这个就“存在”。用属性包装它以访问它并在必要时自动从数据库中读取它。

private TypeOfICD10 _icd10;
private TypeOfICD10 ICD10
{
    get
    {
        if (_icd10 == null) { // Get from database.
            _icd10 = Visit.GetSpecificDiagnosis();   
        }
        return _icd10;
    }
}

现在你可以像这样使用它,它只会在第一次调用时从数据库中读取

protected void gvGeneralDiagnosis_SelectedIndexChanged(object sender, EventArgs e)
{
    string generalDiagnosis = gvGeneralDiagnosis.DataKeys[gvGeneralDiagnosis.SelectedIndex].Values["ICD10Name"].ToString();
    gvSpecificDiagnosis.DataSource = ICD10
        .Where(i => i.ICD10Code.Contains(generalDiagnosis))
        .Select(i => new { i.ICD10Name, i.ICD10Code });
    gvSpecificDiagnosis.DataBind();
}
于 2012-07-28T16:08:30.670 回答
0

我对您的问题中的 Visist 类了解不多,但为什么不以这种方式缓存 ICD10,您将使用缓存的对象,并且仅当缓存键 ICD10 的值为 null 时才会进行数据库调用

例子 :

if(Cache["ICD10"] == null)
{
 var ICD10 = Visit.GetSpecificDiagnosis();
 Cache["ICD10"] = ICD10;
}
else
{
var ICD10 =  Cache["ICD10"];
}
于 2012-07-28T16:13:22.810 回答