数据库
首页 > 数据库> > c#-在运行时更改sqldatasource的select命令

c#-在运行时更改sqldatasource的select命令

作者:互联网

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

标签:gridview,data-binding,sqldatasource,asp-net,c
来源: https://codeday.me/bug/20191201/2081760.html