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命令更改网格视图?
答案 0 :(得分:3)
这是因为GridView
的视图状态而发生的。
当发生回发时,gridview会从ViewState存储其数据。那么,您可以关闭GridView的视图状态(一个好的做法??)或者除GridView.DataBind()
之外还调用SqlDataSource.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
后,无需在GridView.DataBind()
中调用page_Load
,如上面的方法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
答案 1 :(得分:0)
您可以修改您的BoundField,也可以将属性AutoGenerateColumns
更改为true
。
答案 2 :(得分:0)
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();
答案 3 :(得分:0)
将autogenerate设置为true,并确保删除编辑字段向导中的所有字段。如果更改select命令,则会导致冲突。
答案 4 :(得分:0)
尝试添加以下内容:
SqlDataSource.select(DataSourceSelectArguments.Empty);
行[{1}}
之前