1

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

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.
    }
4

1 回答 1

2

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

于 2012-03-04T21:53:29.147 回答