网格视图排序没有';不要第一次点击就开火

本文关键字:第一次 开火 排序 视图 网格 | 更新日期: 2023-09-27 18:26:33

我的代码中有以下两个控件

gridview(用于数据显示)sqldatasource(我的网格视图的源)

我想更改网格视图,但当我更改sqldatasource中的sqlcommandstring时,在数据网格表的新视图中,第一次单击时不会触发排序。请参阅下面的sqlcommandstring更改过程。

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (IsPostBack)
            {   // Restore saved sqlcommand in page refresh, please see below
                SqlDataSource1.SelectCommand = ViewState["MySQL"].ToString();
            }
        }
        catch (Exception ex){}            
    }
    protected void btn_SearchLibrary_Click(object sender, EventArgs e)
    {
        SqlDataSource1.SelectCommand = "SELECT * FROM Books WHERE id=1 OR id=2";
        ViewState["MySQL"] = "SELECT * FROM Books WHERE id=1 OR id=2";
        //Saves sqlcommand in viewstate, to restore it in page refresh.
    }

网格视图排序没有';不要第一次点击就开火

我相信GridView的DataBinding发生在按钮的Click事件处理程序之前。因此,在更改数据源本身之前,您的网格已经从数据源进行了更新。更新Click事件处理程序中的SelectCommand后,必须显式调用网格的DataBind。
此外,顺便说一句,您在Page_Load中的try-catch似乎只是为了抑制NullReferenceException,因为Page_Load也在Click事件处理程序之前触发,所以ViewState["MySQL"]一开始总是为null。