2009-03-06 3 views
0

У меня есть страница aspx, которая имеет GridView и панель с итоговыми данными. Сводные данные находятся в элементе управления, а GridView находится на странице aspx. Когда кто-то нажимает на элемент в Сводных данных, я хочу восстановить GridView, но я не могу понять, как это сделать из элемента управления.Как получить доступ к GridView на странице с помощью элемента управления на странице?

Я попытался использовать FindControl, но, вероятно, не использовал его правильно.

Я попытался это с FindControl, но это не сработало:

GridView gv = (GridView)FindControl("gvSearchResults"); //returns null 

ответ

1

Вы должны отправить GridView ссылку на контроль как свойство контроля (

public GridView GridViewToRebind {get; set;} 

или что-то) ,

+0

Можете ли вы привести пример? – Xaisoft

+0

Я помещал это на страницу aspx как GridView, и я думаю, мне нужно поместить свойство в элемент управления для извлечения GridView. – Xaisoft

+0

Я не могу понять, как использовать FindControl для получения GridView. – Xaisoft

0

FindControl используется контейнером, чтобы найти дочерний элемент управления, который он содержит, если вы используете объект «Страница», чтобы найти gridview, вы должны его найти. Как вы используете свой метод FindControl? Можете ли вы опубликовать простой код.

+0

Можете ли вы привести пример использования страницы для поиска GridView? – Xaisoft

0

Если все элементы управления находятся на одной странице, тогда вы должны увидеть GridView (в intellisense, из события, который его вызвал), и не нужно использовать FindControl. Если summarydata находится в отдельном UserControl, выполните следующие действия:

От UserControl, где находится ваш Сводка данных, ссылка родительской страницы (скажем, это SomePage.aspx):
SomePage родитель = (SomePage) this.Page;
in SomePage.aspx codebehind, введите один метод, который выполняет перемотку:
public void Rebind() {gridview1.Bind(); }
, то вы можете вызвать этот метод Rebind из своего пользовательского элемента управления: parent.Rebind()
вы также можете добавить в него некоторые параметры или другую логику UI/biz!

1

Какой тип управления содержит сводные данные? Возможно, вы можете добавить EventHandler в свой элемент управления сводкими данными, который срабатывает при нажатии на элемент. Вы должны написать обработчик для события в вашем .aspx-коде, а затем связать их в своем .__load (.aspx).

Вот краткий пример:

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridViewEventHandling._Default" %> 
<%@ Register TagName="MyControl" TagPrefix="mc" Src="~/SampleData.ascx" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:GridView ID="uxGridView" runat="server" AutoGenerateColumns="true"> 
     </asp:GridView> 

     <mc:MyControl ID="myControl" runat="server" /> 

    </div> 
    </form> 
</body> 
</html> 

Default.aspx.cs:

using System; 
using System.Collections.Generic; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace GridViewEventHandling 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      myControl.OnLinkClick += new EventHandler(myControl_OnLinkClick); 
     } 

     private void myControl_OnLinkClick(object sender, EventArgs e) 
     { 
      uxGridView.DataSource = GetDataSource(); 
      uxGridView.DataBind(); 
     } 

     private IDictionary<string, string> GetDataSource() 
     { 
      IDictionary<string, string> dict = new Dictionary<string, string>(); 
      dict.Add("Product 1", "Description 1"); 
      dict.Add("Product 2", "Description 2"); 
      dict.Add("Product 3", "Description 3"); 
      return dict; 
     } 


    } 
} 

SampleData.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SampleData.ascx.cs" Inherits="GridViewEventHandling.SampleData" %> 

<asp:LinkButton ID="item1" OnClick="HandleClick" CommandName="BindGrid" CommandArgument="1" Text="Item 1" runat="server" /><br /> 
<asp:LinkButton ID="item2" OnClick="HandleClick" CommandName="BindGrid" CommandArgument="2" Text="Item 2" runat="server" /><br /> 
<asp:LinkButton ID="item3" OnClick="HandleClick" CommandName="BindGrid" CommandArgument="3" Text="Item 3" runat="server" /><br /> 

SampleData. ascx.cs:

using System; 

namespace GridViewEventHandling 
{ 
    public partial class SampleData : System.Web.UI.UserControl 
    { 
     public event EventHandler OnLinkClick; 

     protected void HandleClick(object sender, EventArgs args) 
     { 
      if (OnLinkClick != null) 
       OnLinkClick(sender, args); 
     } 
    } 
} 
+0

Вот как бы я это сделал, логика обновления gridview действительно принадлежит на странице, так как там она находится. Выполнение этого контроля не является идеальным. – spilliton

Смежные вопросы