Изменить команду select sqldatasource во время выполнения - PullRequest
3 голосов
/ 24 марта 2012

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 не меняется в зависимости от новой команды выбора, даже когда я использую DataBind ()

Как мы можем изменить базу вида сетки по команде выбора источника данных sql?

Ответы [ 5 ]

3 голосов
/ 01 сентября 2013

Это происходит из-за состояния 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
0 голосов
/ 06 марта 2013

Попробуйте добавить следующее:

 SqlDataSource.select(DataSourceSelectArguments.Empty);

перед строкой SqlDataSource.DataBind();

0 голосов
/ 24 марта 2012
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();
0 голосов
/ 06 июня 2012

Установите автогенерацию на true и обязательно удалите все поля в мастере редактирования полей.Если вы измените команду выбора, это вызовет конфликт.

0 голосов
/ 24 марта 2012

Вы можете отредактировать BoundField или изменить свойство AutoGenerateColumns на true.

...