Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET GridView.DataBind未刷新GridView_C#_Asp.net_Gridview_Data Binding - Fatal编程技术网

C# ASP.NET GridView.DataBind未刷新GridView

C# ASP.NET GridView.DataBind未刷新GridView,c#,asp.net,gridview,data-binding,C#,Asp.net,Gridview,Data Binding,首先,我使用多视图控件逐步引导用户进行搜索。“多视图”中的第一页只是一个带有按钮的搜索框,用于执行搜索 第二个页面有GridView,但我想保留搜索框和按钮,以便用户在没有找到他们要找的用户时再次搜索 当您从第一页搜索并移动到第二页时,GridView会显示正确的结果。但是当它在第二个页面上同时显示GridView和search时,GridView不会更新。下面是我正在使用的代码 //GridView = SearchResults //SqlDataSource = AddPlayerDa

首先,我使用多视图控件逐步引导用户进行搜索。“多视图”中的第一页只是一个带有按钮的搜索框,用于执行搜索

第二个页面有GridView,但我想保留搜索框和按钮,以便用户在没有找到他们要找的用户时再次搜索

当您从第一页搜索并移动到第二页时,GridView会显示正确的结果。但是当它在第二个页面上同时显示GridView和search时,GridView不会更新。下面是我正在使用的代码

//GridView = SearchResults  
//SqlDataSource = AddPlayerDataSource  
//MultiView = PlayerSearchView

protected void PlayerSearch_Click(object sender, ImageClickEventArgs e)
{
    string userId = User.Identity.Name.ToString();

    if (SearchText.Text != "" && !userId.Equals(""))
    {
        GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");

        string SqlSelect = "SELECT [id], [username] FROM [users] WHERE [username] LIKE '%" + SearchText.Text + "%'";
        AddPlayerDataSource.SelectCommand = SqlSelect;
        SearchResults.DataBind();

         if (PlayerSearchView.ActiveViewIndex != 1)
             PlayerSearchView.ActiveViewIndex = 1;
    }
}

与其声明一个新的gridview SearchResults,然后对gridview的卷影副本调用databind,不如在视图本身中对gridview进行数据绑定

就打电话

GridViewPlayerSearchView.FindControlSearchResults.DataBind

而不是

SearchResults.DataBind

那你就可以摆脱它了

GridView SearchResults=GridViewPlayerSearchView.FindControl搜索结果


这样,SqlDataSource控件将在数据绑定现有gridview而不是副本时执行select。是否需要设置DataSource属性?您在代码上方的注释中设置了这一点,但不清楚何时会发生。在SearchResults.DataBind上设置断点,并确保所有属性都在此处正确设置

顺便说一下。。。这类问题就是为什么使用适当的业务逻辑层是非常可取的。如果您控制的是实际执行DB查询的代码,那么您就不会有这个问题,或者确切地知道它在哪里

GridView SearchResults = (GridView)PlayerSearchView.FindControl("SearchResults");
SearchResults.DataSource = Data.Players.LoadAll(); //Loads a DataTable with your data
SearchResults.DataBind();
编辑:
如果删除“多视图”,是否所有操作都按预期方式进行?让我们缩小问题的范围。

这是一种奇怪的行为,我建议您尝试一个存储过程。@nmiranda,使用存储过程还是直接SQL在这里没有区别。不是ASP.NET数据绑定发生了。@Eilon,对不起,用我的英语说,我的意思是这件事发生在我身上,在我用谷歌搜索后,我发现很多人都有同样的问题,他们用存储过程解决了,我也是。这就是我建议使用存储过程的原因。作为旁注。。。这段代码看起来像是一个SQL注入攻击正在等待发生。是的,确实如此,为了清晰起见,我以这种方式包含了SQL。我确实尝试过,但没有成功。使用C时,对象的赋值不是生成卷影副本。它引用的是原始控件对象。DataSource属性在.aspx主页中设置。正如我所说,当ViewState.ActivePageIndex从0更改为1时,它工作正常。但是当我已经在ActivePageIndex=1上时,GridView不会刷新。我不确定这样分配数据源是否有好处。好处是LoadAll实际上正在进行SQL/数据层调用。正是你缺少的部分。可以通过手动调用Select强制AddPlayerDataSource重新加载吗?我对这个东西不太熟悉,谢谢。我对这个问题研究得太久了。多视图对我隐瞒了真正的问题。我对搜索文本框有问题。更具体地说,我认为搜索文本框和按钮在多视图之外,但我把它们放在了多视图内。最终结果是两个不同的文本框。粗心的错误感谢大家的帮助。