Как мога да заредя същия изглед на ASP мрежа с различни условия?

Имам DDL и ASP .net Grid изглед в моята 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