第一次单击时不会触发Gridview排序

时间:2012-03-04 21:34:01

标签: c# gridview asp.net-controls

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

gridview(用于数据显示) sqldatasource(我的gridview的源代码)

我想更改gridview,但是当我更改sqldatasource中的sqlcommandstring时,在我的datagrid表的新视图中,第一次单击时不会触发排序。请参阅下面的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.
    }

1 个答案:

答案 0 :(得分:2)

我相信您的GridView的DataBinding发生在按钮的Click事件处理程序之前。因此,在更改数据源本身之前,您的网格已从数据源更新。在Click事件处理程序中更新SelectCommand后,您必须为网格显式调用DataBind。
另外,看起来你的Page_Load中的try-catch只是为了抑制NullReferenceException,因为Page_Load也会在Click事件处理程序之前触发,因此ViewState["MySQL"]最初总是为空。