Получение элементов в GridView после его привязки - PullRequest
2 голосов
/ 02 октября 2011

У меня есть UserControl AutomatedFeedGridView.ascx, который по сути является GridView. Он имеет публичное свойство Category, которое передается на страницу с помощью элемента управления.

Проблема в том, что я хочу фильтровать по выпадающему списку на странице вызова.

Ниже приведен код для AutomatedFeedGridView элемента управления:

// The feed category
public Feeds.FeedCategory Category { get; set; }


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<AutomatedFeed> x = Feeds.GetAutomatedFeed(Category);
        gvAutomatedFeed.DataSource = x;
        gvAutomatedFeed.DataBind();
    }

    else
    {
        List<AutomatedFeed> x = (List<AutomatedFeed>)gvAutomatedFeedCategory.DataSource;

        foreach (AutomatedFeed y in x)
        {
            // if condition is not met, hide y
        }
    }

Таким образом, при первой загрузке GridView привязывается к списку объектов AutomatedFeed. При любых последующих вызовах (вызванных обратной передачей на странице, содержащей элемент управления) я хочу запустить некоторый код, чтобы отфильтровать некоторые элементы в GridView. Проблема в этой строке:

List<AutomatedFeed> x = (List<AutomatedFeed>)gvAutomatedFeedCategory.DataSource;

Я перепробовал все решения здесь , но ни одно из них, похоже, не работает, я всегда получаю Ссылку на объект, не установленную для ошибки экземпляра. Я что-то упускаю или делаю это совершенно неправильно?

Я знаю, что мог бы просто сделать еще один вызов Feeds.GetAutomatedFeed(Category), но должен быть лучший способ сделать это, чем сделать другой вызов хранимой процедуры?

Ответы [ 2 ]

1 голос
/ 02 октября 2011

Вы можете сохранить источник данных в сеансе как Session["x"] = x ;

когда страница пост назад возвращает его обратно как List<AutomatedFeed> x = List<AutomatedFeed>)Session["x"];

UPDATE:

Свойство DataSource будет иметь значение null, если вы явно не переназначите и не перепривязаете его при каждой обратной передаче.

Вы можете использовать Session, Cache или ViewState для хранения DataSource. Но это займет больше памяти.

0 голосов
/ 02 октября 2011

Элемент управления генерируется и заполняется только после page.load, поэтому он не будет содержать никаких данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...