This is a migrated thread and some comments may be shown as answers.

ASP.NET Custom User Controls and NeedDataSource Event Sequence

0 Answers 10 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Archen
Top achievements
Rank 1
Archen asked on 08 Oct 2013, 09:30 PM
Hi,

As a Telerik newbie, I'd like to seek some wisdom on RadGrid implementation. I have a single ASP.NET page that is structured with two custom user controls: one for getting user inputs and another for displaying results based on inputs. The custom controls look like the following:

// ctrlInput.ascx.cs
// consists of several controls (dropdown lists, checkboxes and a submit button)
  
public event EventHandler BtnClickEvent;
protected void Btn_Click(object sender, EventArgs e)
{
    BtnClickEvent(this, e);
}

//ctrlRadGrid.ascx.cs
//display result table based on ctrlInput values
  
public event EventHandler MyGridNeedDataSource;
          
protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    MyGridNeedDataSource(this, e);
}

When user makes proper selection on ctrlInput and then click on submit button, BtnClickEvent will be raised to the containing aspx page, which looks like this:

// MyPage.aspx.cx
  
protected void Page_Init(object sender, EventArgs e)
{
    ctrlInput1.BtnClickEvent += new EventHandler(Foo_btnClickEvent);
    ctrlRadGrid1.MyGridNeedDataSource += new EventHandler(myGrid_NeedDataSource);
}
          
protected void Page_Load(object sender, EventArgs e)
{
    // toggle panel visibility
    if (!IsPostBack)
    {
        pnlInputs.Visible = true;
        pnlResults.Visible = false;
    }
    else
    {
        pnlInputs.Visible = false;
        pnlResults.Visible = true;              
    }
}
          
protected void myGrid_NeedDataSource(object sender, EventArgs e)
{
    if (ViewState["MyParams"] != null)
      {
         myGrid.DataSource = GetData(ViewState["MyParams"]);
      }
}
          
protected void Foo_btnClickEvent(object sender, EventArgs e)
{
    var ctrl = (ctrlInput)sender;
      ViewState["MyParams"] = ctrl.InputParams;
}
 
private DataTable GetData(string param)
{
    //DONE: call stored procedure with param
}

When myGrid_NeedDataSource fires for the first time, there's nothing to pass to GetData because Foo_btnClickEvent, which contains user's inputs, is always fired "afterwards". Can someone please shed some lights on how to achieve this or even suggest a better design/implementation?

Thanks in advance,


 



No answers yet. Maybe you can help?

Tags
General Discussions
Asked by
Archen
Top achievements
Rank 1
Share this question
or