Как загрузить одно и то же представление сетки ASP с разными условиями?

У меня есть DDL и представление сетки ASP .net на моей странице aspx. У меня есть два метода getALLProgram и getProgramBy name, оба работают нормально. Моя проблема: когда страница загружается в первый раз, я хочу вызвать метод getAllprogram, после этого, если пользователь выбирает программу из DDL, я хочу, чтобы вызывался мой метод getprogramByname.

Как вот мой код:

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindProgramDDL();
            BindGrid();
        }
        //BindProgramDDL();
    }

    protected void BindGrid()
    {
        string strProgramCode = DDLProgram.SelectedIndex.ToString();
        List<FormGridEntity> gridEntities = new List<FormGridEntity>();

        GridForResult.DataSource = gridEntities;
        GridForResult.DataBind();

        //throw new NotImplementedException();
    }

    protected void BindProgramDDL()
    {
        List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();

        DDLProgram.DataSource = programEntities;
        DDLProgram.DataTextField = "Shortname";
        DDLProgram.DataValueField = "Id";
        DDLProgram.DataBind();
        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

    protected void OnDDLProgramChanged(object sender, EventArgs e)
    {
        List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();
        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

Кодекс неполный. я все еще работаю над этим. Но я не улавливаю логики. Как мне это сделать, о чем я вам здесь рассказал. Я надеюсь, что я ясно изложил свой вопрос, если он сбивает с толку, пожалуйста, дайте мне знать, что еще я должен предоставить здесь.


person Pankouri    schedule 11.07.2011    source источник
comment
Каков ваш источник GridView? SQLDataSource или ObjectDataSource?   -  person Muhammad Akhtar    schedule 11.07.2011


Ответы (3)


Вы должны проверить в своем BindGrid, была ли выбрана какая-либо программа или нет, и направить вызов в соответствии с этим. Например,

protected void BindGrid()
{
   ...
   if (DDLProgram.SelectedIndex >= 0)
   {
      // program selected
      var programCode = DDLProgram.SelectedValue;
      data = GetProgramByName(programCode);
   }
   else
   {
      // get all programs
      data = GetAllPrograms();
   }

   // bind data with grid
}

Вы можете безоговорочно вызвать BindGrid в page_load (то есть также в сценариях обратной передачи) или вызвать его при изменении DDL.

person VinayC    schedule 11.07.2011
comment
Я искал эту простую логику. Временами я чувствую себя тупицей. Почему эта логика не пришла мне в голову. Я использовал эту логику раньше. В любом случае спасибо за экономию моего времени. :) - person Pankouri; 11.07.2011
comment
Я думаю, что ВСЕ мы упустили здесь небольшую хитрость. Если bindDDL вызывается перед bindgrid(), выбранный индекс никогда не будет равен нулю. Таким образом, это изменение также будет частью ответа на этот вопрос. Спасибо всем вам. - person Pankouri; 12.07.2011

как насчет записи getProgramByname в выбранном событии изменения индекса раскрывающегося списка и getALLProgram в событии загрузки страницы?

Надеюсь, я ясно понял, в чем помогли ваши сомнения и вышеупомянутое предложение.

person Karan Shah    schedule 11.07.2011

Просто измените эти 2 вещи

    protected void BindGrid()
    {
        List<FormGridEntity> gridEntities = (DDLProgram.SelectedIndex==-1)
          ?FormSaleSubmit_BAO.GetAllPrograms()
          :FormSaleSubmit_BAO.GetProgramByName(DDLProgram.SelectedValue);

        GridForResult.DataSource = gridEntities;
        GridForResult.DataBind();
    }

    protected void OnDDLProgramChanged(object sender, EventArgs e)
    {
        BindGrid();
    }
person Atzoya    schedule 11.07.2011