Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 使用GridView的用户控件_C#_Asp.net_.net_Gridview_User Controls - Fatal编程技术网

C# 使用GridView的用户控件

C# 使用GridView的用户控件,c#,asp.net,.net,gridview,user-controls,C#,Asp.net,.net,Gridview,User Controls,我有一个用户控件和一个GridView。我已经将datatable、dtResult声明为static,以便从页面中获取它。现在,我有一个方法,例如 protected void BindGridView() { gvMyGrid.DataSource = dtResult; //this dtResult varies depending on the call of publicly exposed method of this user control. gvMyGrid.

我有一个用户控件和一个GridView。我已经将datatable、dtResult声明为static,以便从页面中获取它。现在,我有一个方法,例如

protected void BindGridView()
{
    gvMyGrid.DataSource = dtResult; //this dtResult varies depending on the call of publicly exposed method of this user control.
    gvMyGrid.DataBind();
}

public void GetResult(string text)
{
    dtResult = new DataTable();
    dtResult = Getdata(text); //This method returns the collection by filtering it with text
    BindGridView();
}

public void GetResult()
{
    dtResult = new DataTable();
    dtResult = Getdata();
    BindGridView();
}
现在我可以很容易地调用任何一个方法来绑定结果,但是在分页之后绑定相同的方法对我来说真的很难。如何记住最后调用的方法,因为它可能是其中的任何一个,我必须自动处理它,因为它在用户控件中


请告知。

不要让它成为静态的。这将在所有请求中共享它,这最多会导致锁定。这不是您应该使用的方式,而是在需要时始终加载它。如果启用了ViewState(默认),则仅当(!IsPostBack)和更改源时(例如排序或分页时),才需要它。编辑:“dtResult为静态以从页面获取”,那么原因是您希望在UserControl中访问它?然后在控件中提供一个属性
DataSource
,并在页面中进行设置。这是正确的方法,因为页面是控制器,而不是UC。@TimSchmelter:我有了一个想法,并尝试使用一个名为用户控件数据源的公共属性来实现它。现在的问题是,在尝试更改页面索引时,我的数据源变为空。试图将其放入ViewState,但由于数据源包含列表,它将变得巨大。同样需要您的建议。不要将数据源置于ViewState中,如果您需要更改GridView页面索引,请按照上面的注释再次从数据库加载数据源。@TimSchmelter但问题是,我已使用逻辑从调用页面填充数据源,以获取不同页面的数据,而我的用户控件中没有相同的逻辑来重新加载数据源再次从那里获取数据源。这就是我之前遇到的问题,并将数据放入静态DataTable中。您可以通过以下方式从UC访问页面的真实实例:
PageName p=(PageName)This.page。但最好还是让页面“注入”源代码,否则您将此用户控件与此页面硬连接,这是不需要的。阅读:我不理解这个问题,如果不同的页面有不同的逻辑来获取数据,他们也会将不同的数据源传递给UC,这很好,不是吗?