0

我正在尝试找到获取数据绑定控件值的最佳实践。我的应用程序现在(通常)的工作方式是在页面加载时调用 getSettings() 或其他东西,并为每个 DropDownLists 或 Repeater 进行数据库调用。

在这种特殊情况下,我根据单击的 Button 将数据绑定到 DropDownList。当应用程序进入数据库并获取所需信息时,数据显示之前存在延迟。

我想知道是否有更好的方法来处理获取值,也许每次加载页面时都不需要进行数据库调用。我已经包含了一些示例代码以防万一。

.aspx:

<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList>
<asp:Button ID="btn1" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table1" />
<asp:Button ID="btn2" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table2" />
<asp:Button ID="btn3" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table3" />
<asp:Button ID="btn4" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table4" />

代码隐藏:

DBClass dbc = new DBClass();

protected void btn_Command (object sender, CommandEventArgs e){
    if (e.CommandName == "change"){
        ddl.DataSource = dbc.ExecuteQuery("SELECT * FROM " + e.CommandArgument);
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}

有没有办法缓存结果?我知道这个很粗糙,因为它只有一个 DropDownList,但即使每个按钮都有一个,有没有什么方法可以在不进行 4 次数据库调用的情况下获取数据?

提前致谢。

4

3 回答 3

0

您可以简单地将这些值存储在 Application 变量中,并且只在Application_Startup. 请参阅Microsoft的一些简单示例。

全球.asax

protected void Application_Start(object sender, EventArgs e)
{
    DBClass dbc = new DBClass();
    Application["table1"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table1");
    Application["table2"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table2");
    // ...
}

代码隐藏

protected void btn_Command (object sender, CommandEventArgs e)
{
    if (e.CommandName == "change")
    {
        ddl.DataSource = Application[e.CommandArgument] as IEnumerable<TResult>;
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}
于 2011-08-30T13:20:29.187 回答
0

您可以更改查询以返回多个结果集,并将结果填充到 DataSet 中。加载 DataSet 后,您可以将 DataSet 中的每个 DataTable 绑定到相应的 DropDown。

如果需要,您还可以缓存结果或将它们置于应用程序状态。我仍然会考虑合并查询。

于 2011-08-30T13:31:17.647 回答
0

找到了一种使用 jQuery ajax 的方法。我单击一个按钮客户端,它会吐出我需要在WebMethod. 再做一些工作,但删除所有回发并加载我不需要或使用的回发。

谢谢大家!

于 2011-10-14T14:42:34.970 回答