用ObjectDataSource给gridview填充,当前一打开页面执行查询操作,由于没有传查询条件,所以速度影响很大。
需要:每次打开页面时,对gridview直接绑定null即可,而不需要去绑定Query中的数据集,该如何写?
目前为
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="Query"
SelectCountMethod="Count" SortParameterName="orderClause" TypeName="AA.A.aa"
EnablePaging="true">protected void btnQuery_Click(object sender, EventArgs e)
{
}
需要:每次打开页面时,对gridview直接绑定null即可,而不需要去绑定Query中的数据集,该如何写?
目前为
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="Query"
SelectCountMethod="Count" SortParameterName="orderClause" TypeName="AA.A.aa"
EnablePaging="true">protected void btnQuery_Click(object sender, EventArgs e)
{
}
我在<asp:ControlParameter ControlID="ddl_contract_type" Name="contract_type" PropertyName="Text" DefaultValue="-1" />
默认传了-1,即contract_type=-1是查不到数据的,那么当点击查询要查数据时,这个-1还会带到查询条件中去,这样不行吧?
这样在刚进入页面时就不执行了。正确。
那么在我用查询条件时,有联动下拉框的查询条件,例如选择省份,则联动下拉框中显示该省份下的城市,当执行protected void ddl_contract_type_SelectedIndexChanged(object sender, EventArgs e)时,就会执行到IsPostBack中了,这个时候又去交互数据库了,能用什么办法避免
{
gridViewID.DataSourceID="ObjectDataSource1";
}
<label>
省</label>
<asp:DropDownList runat="server" ID="ddl_contract_type" AutoPostBack="true" OnSelectedIndexChanged="ddl_contract_type_SelectedIndexChanged">
</asp:DropDownList>
<label>
城市</label>
<asp:DropDownList runat="server" ID="ddl_contract_sub_type">
</asp:DropDownList>当选择了“省”的下拉框而不点击查询按钮时,还是会直接查出结果,导致等待时间长。要不让他查询出结果,怎解?
下拉框事件如下
protected void ddl_contract_type_SelectedIndexChanged(object sender, EventArgs e)
{
CMSContractTypeBLL _contractType = new CMSContractTypeBLL();
PageUtil.BuildDropDownList(ddl_contract_sub_type, _contractType.GetContractSubType(ConvertUtil.ToInt32(ddl_contract_type.SelectedValue)), "type_sub_desc", "type_sub_id", null);
ddl_contract_sub_type.Items.Insert(0, new ListItem("全部", ""));
}
和 ObjectDataSource1 没有关联的
page_load里没写,写在查询事件里了
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}protected void btnQuery_Click(object sender, EventArgs e)
{
WebGridView1.DataSourceID = "ObjectDataSource1";
WebGridView1.DataBind();
}
<asp:DropDownList ID="ddlOne" AutoPostBack="true" runat="server"
onselectedindexchanged="ddlOne_SelectedIndexChanged">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlTwo" runat="server"></asp:DropDownList>
<asp:Button ID="btnQuery" runat="server" Text="查询" onclick="btnQuery_Click" />
<asp:GridView ID="gv" runat="server"></asp:GridView>
<asp:ObjectDataSource ID="ods" runat="server" SelectMethod="AllPeoples" TypeName="WebApplication1._Default"></asp:ObjectDataSource>
</p>
.cs
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
public static IList<People> AllPeoples()
{
return new List<People> {
new People { Name = "A", Age = 22 },
new People { Name = "B", Age = 21 },
new People { Name = "C", Age = 23 },
new People { Name = "D", Age = 22 },
new People { Name = "E", Age = 24 }
};
} protected void btnQuery_Click(object sender, EventArgs e)
{
gv.DataSourceID = "ods";
} protected void ddlOne_SelectedIndexChanged(object sender, EventArgs e)
{
switch (ddlOne.SelectedValue)
{
case "1":
ddlTwo.Items.Add(new ListItem("4", "4"));
ddlTwo.Items.Add(new ListItem("5", "5"));
break; case "2":
ddlTwo.Items.Add(new ListItem("6", "6"));
break; case "3":
ddlTwo.Items.Add(new ListItem("7", "7"));
ddlTwo.Items.Add(new ListItem("8", "8"));
break;
}
}
} public class People
{
public String Name { set; get; }
public Int32 Age { set; get; }
}
}