在运行时更改sqldatasource的select命令
本文关键字:select 命令 sqldatasource 运行时 | 更新日期: 2023-09-27 18:28:50
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" />
<asp:BoundField DataField="name" HeaderText="name" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:database1ConnectionString %>"
SelectCommand="SELECT * from tblCourse"></asp:SqlDataSource>
代码
SqlDataSource1.SelectCommand =
"SELECT * from tblCourse where name='"+textbox1.text+"'";
SqlDataSource1.DataBind();
但是Gridview不会根据新的select命令而改变,即使我使用DataBind()
如何根据sql数据源的select命令更改网格视图?
GridView
的视图状态。
当发生回发时,gridview从ViewState存储其数据。因此,您可以关闭GridView的视图状态(这是一种很好的做法吗?),也可以在SqlDataSource.Databind();
之外调用GridView.DataBind()
方法1:调用GridView.DataBind();
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
{
string command = SqlDataSource1.SelectCommand; // added just for debug purpose
SqlDataSource1.SelectCommand = "SELECT * from tblCourse where
name='"+textbox1.text+"'";
SqlDataSource1.DataBind();
gridview1.DataBind();
}
}
方法2:关闭GridView的视图状态(这是一个好做法吗?)。当您设置此false
时,不需要在page_Load
中调用GridView.DataBind()
,如上面的方法1所示。
<asp:GridView runat="server" ID="gridview1" EnableViewState="false" ... />
现在,应该处理的部分来了::
请确保<asp:BoundField>
或通常声明并绑定到GridView
标记的任何字段也存在于您的新查询中,否则将抛出一个类似于以下内容的错误:
A field or property with the name 'ID' was not found on the selected data source
string strSql= "SELECT * from tblCourse where name='abc'";
ViewState["SQL"]=strSql;
SqlDataSource1.SelectCommand =strSql;
SqlDataSource1.DataBind();
现在在Page_Load 中
if(IsPostback)
SqlDataSource1.SelectCommand=ViewState["SQL"].ToString();
您可以编辑BoundField或将属性AutoGenerateColumns
更改为true
。
将autogenerate设置为true,并确保删除编辑字段向导中的所有字段。如果更改select命令,则会导致冲突。
尝试添加以下内容:
SqlDataSource.select(DataSourceSelectArguments.Empty);
行SqlDataSource.DataBind();
之前