的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();
但是,即使我正在使用DataBind(),Gridview也不会基于新的select命令而更改
如何基于sql数据源的select命令更改网格视图?
解决方法:
这是由于GridView的viewstate而发生的.
当发生回发时,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