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

У меня есть DDL и ASP .NET Grid на моей странице aspx. У меня есть два метода getALLProgram и имя getProgramBy, оба работают нормально. Моя проблема: когда страница загружается в первый раз, я хочу вызвать метод 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;
    }

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

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.

Просто измени эти 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();
    }

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

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

Другие вопросы по тегам