我正在尝试找到获取数据绑定控件值的最佳实践。我的应用程序现在(通常)工作的方式是在页面加载时我调用getSettings()或其他东西,并为每个DropDownLists或Repeater进行数据库调用。
在这种特殊情况下,我将数据绑定到DropDownList,具体取决于单击哪个Button。当应用程序进入数据库并获取所需信息时,数据显示之前会有一段延迟。
我想知道是否有更好的方法来处理获取值,可能每次加载页面时都不会进行数据库调用。为了以防万一,我已经包含了一些示例代码。
的.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次数据库调用的情况下获取数据?
提前致谢。
答案 0 :(得分:0)
您可以简单地将这些值存储在Application变量中,并仅在Application_Startup
上检索它们一次。请参阅Microsoft中的一些简单示例。
<强> Global.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();
}
}
答案 1 :(得分:0)
您可以更改查询以返回多个结果集,并将结果填充到DataSet中。加载DataSet后,您可以将DataSet中的每个DataTable绑定到相应的DropDown。
如果需要,您还可以缓存结果或将其置于应用程序状态。我仍然会考虑合并查询。
答案 2 :(得分:0)
使用jQuery ajax找到了一种方法。我单击一个按钮客户端,它会在WebMethod
中吐出我需要格式化的某些html服务器端的值。多做一点工作,但删除所有回发并加载我不需要或使用的回发。
谢谢大家!