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

Multiple ComboBoxes in EditForm with UserControl

1 Answer 99 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Hrvach
Top achievements
Rank 1
Hrvach asked on 15 Sep 2011, 01:36 PM
Hi!

I have a RadGrid with UserControl within EditForm which has couple of ComboBoxes in it. What I'd like to do is to bind data to ComboBoxes depending of the value selected in the first ComboBox. ComboBoxes are bound in the ItemDataBound event of the RadGrid and the code there looks like this:

protected void gvTicketi_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
    int idAuthenticatedManager = Convert.ToInt32(Session["authenticatedUI"]);
 
    if ((e.Item is GridEditFormItem) && e.Item.IsInEditMode)
    {
        GridEditFormItem editFormItem = (GridEditFormItem)e.Item;
        UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
 
        TSEntities db = new TSEntities();
        Ticket ticket = new Ticket();
        TicketAsset ticketAsset = new TicketAsset();
        Daily daily = new Daily();
 
        RadComboBox rcbTip = (RadComboBox)userControl.FindControl("rcbTip");
        rcbTip.Items.Add(new RadComboBoxItem("Incident"));
        rcbTip.Items.Add(new RadComboBoxItem("Reklamacija"));
        rcbTip.Items.Add(new RadComboBoxItem("Nova funkcionalnost"));
        rcbTip.DataBind();
        rcbTip.FindItemByText("Incident").Selected = true;
 
        RadComboBox rcbStatus = (RadComboBox)userControl.FindControl("rcbStatus");
        rcbStatus.Items.Add(new RadComboBoxItem("New"));
        rcbStatus.Items.Add(new RadComboBoxItem("U radu"));
        rcbStatus.Items.Add(new RadComboBoxItem("On hold"));
        rcbStatus.Items.Add(new RadComboBoxItem("Pending"));
        rcbStatus.Items.Add(new RadComboBoxItem("Scheduled"));
        rcbStatus.Items.Add(new RadComboBoxItem("Canceled"));
        rcbStatus.Items.Add(new RadComboBoxItem("Completed"));
        rcbStatus.DataBind();
        rcbStatus.FindItemByText("New").Selected = true;
 
        RadComboBox rcbVrstaPrijave = (RadComboBox)userControl.FindControl("rcbVrstaPrijave");
        rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Odaberi vrstu prijave"));
        rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Usmeno"));
        rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Telefon"));
        rcbVrstaPrijave.Items.Add(new RadComboBoxItem("E-mail"));
        rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Web"));
        rcbVrstaPrijave.DataBind();
 
        RadComboBox rcbPrioritet = (RadComboBox)userControl.FindControl("rcbPrioritet");
        rcbPrioritet.Items.Add(new RadComboBoxItem("Low"));
        rcbPrioritet.Items.Add(new RadComboBoxItem("Normal"));
        rcbPrioritet.Items.Add(new RadComboBoxItem("High"));
        rcbPrioritet.Items.Add(new RadComboBoxItem("Odmah"));
        rcbPrioritet.DataBind();
        rcbPrioritet.FindItemByText("Normal").Selected = true;
 
        RadComboBox rcbTvrtka = (RadComboBox)userControl.FindControl("rcbTvrtka");
 
        var tvrtkeList = (from t in db.Firma
                          select t).ToList();
 
 
        rcbTvrtka.DataSource = from t in tvrtkeList
                               select new { t.idFirma, t.Naziv };
 
        rcbTvrtka.DataTextField = "Naziv";
        rcbTvrtka.DataValueField = "idFirma";
        rcbTvrtka.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idFirma') %>'";
 
        rcbTvrtka.DataBind();
        rcbTvrtka.Enabled = true;
 
        RadComboBox rcbNadredeniTicket = (RadComboBox)userControl.FindControl("rcbNadredeniTicket");
        rcbNadredeniTicket.Items.Add(new RadComboBoxItem("Bez nadreÄ‘enog ticketa", "0"));
 
        var nadredenTicketList = (from t in db.Ticket
                                  select t).ToList();
 
        if (nadredenTicketList.Count > 0)
        {
            rcbNadredeniTicket.DataSource = from t in nadredenTicketList
                                            where t.Zatvoren == false
                                            select new { t.idTicket, t.idNadredeniTicket, OpisTicketa = t.idTicket + " - " + t.Opis };
 
            rcbNadredeniTicket.DataTextField = "OpisTicketa";
            rcbNadredeniTicket.DataValueField = "idTicket";
            rcbNadredeniTicket.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idNadredeniTicket') %>'";
        }
 
        rcbNadredeniTicket.DataBind();
 
        RadComboBox rcbPrijavio = (RadComboBox)userControl.FindControl("rcbPrijavio");
        rcbPrijavio.Items.Add(new RadComboBoxItem("Bez kontakta", "0"));
 
        rcbPrijavio.DataSource = from k in db.Kontakt
                                 select new { k.idKontakt, kontaktNaziv = k.Ime + " " + k.Prezime };
 
        rcbPrijavio.DataTextField = "kontaktNaziv";
        rcbPrijavio.DataValueField = "idKontakt";
        rcbPrijavio.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idKontakt') %>'";
        rcbPrijavio.DataBind();
 
        RadComboBox rcbZaprimio = (RadComboBox)userControl.FindControl("rcbZaprimio");
 
        rcbZaprimio.DataSource = from k in db.Kontakt
                                 select new { k.idKontakt, kontaktNaziv = k.Ime + " " + k.Prezime };
 
        rcbZaprimio.DataTextField = "kontaktNaziv";
        rcbZaprimio.DataValueField = "idKontakt";
        rcbZaprimio.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idManager') %>'";
        rcbZaprimio.DataBind();
        rcbZaprimio.FindItemByValue(idAuthenticatedManager.ToString()).Selected = true;
        rcbZaprimio.Enabled = false;
 
        RadComboBox rcbAsset = (RadComboBox)userControl.FindControl("rcbAsset");
        rcbAsset.Items.Add(new RadComboBoxItem("Bez pridruženog asseta", "0"));
 
        var assetList = (from a in db.Asset
                         select a).ToList();
 
        if (assetList.Count > 0)
        {
            rcbAsset.DataSource = from a in assetList
                                  select new { a.idAsset, a.Naziv };
 
            rcbAsset.DataTextField = "Naziv";
            rcbAsset.DataValueField = "idAsset";
            rcbAsset.Text = "'<%# DataBinder.Eval(Container, 'DataItem.Naziv') %>'";
            rcbAsset.DataBind();
        }
 
        if (!e.Item.OwnerTableView.IsItemInserted)
        {
            int idTicket = Convert.ToInt32(editFormItem.GetDataKeyValue("idTicket"));
            ticket = db.Ticket.SingleOrDefault(t => t.idTicket == idTicket);
 
            double sumaVremena = 0;
 
            var tickets = from d in db.Daily
                          where d.idTicket == idTicket
                          select d;
 
            foreach (var ticketDaily in tickets)
            {
                sumaVremena += ticketDaily.EfektivnoSati;
            }
 
            TextBox txtUtrosenoVrijeme = (TextBox)userControl.FindControl("txtUtrosenoVrijeme");
            txtUtrosenoVrijeme.Text = sumaVremena.ToString();
 
            string tip = ticket.Tip;
            rcbTip.Items.FindItemByText(tip).Selected = true;
 
            string status = ticket.Status;
            rcbStatus.Items.FindItemByText(status).Selected = true;
 
            string vrstaPrijave = ticket.VrstaPrijave;
            rcbVrstaPrijave.Items.FindItemByText(vrstaPrijave).Selected = true;
 
            string prioritet = ticket.Prioritet;
            rcbPrioritet.Items.FindItemByText(prioritet).Selected = true;
 
            int idTvrtka = ticket.idFirma;
            rcbTvrtka.FindItemByValue(idTvrtka.ToString()).Selected = true;
 
            int kontakt = Convert.ToInt32(ticket.idKontakt);
 
            if (ticket.idKontakt == null)
            {
                rcbPrijavio.Items.FindItemByValue("0").Selected = true;
            }
            else
            {
                rcbPrijavio.Items.FindItemByValue(kontakt.ToString()).Selected = true;
            }
 
            int manager = Convert.ToInt32(ticket.idManager);
            rcbZaprimio.Items.FindItemByValue(manager.ToString()).Selected = true;
 
            int nadredeniTicket = Convert.ToInt32(ticket.idNadredeniTicket);
 
            if (ticket.idNadredeniTicket == ticket.idTicket)
            {
                rcbNadredeniTicket.Items.FindItemByValue("0").Selected = true;
            }
            else
            {
                rcbNadredeniTicket.Items.FindItemByValue(nadredeniTicket.ToString()).Selected = true;
            }
 
            var ticketAssetCount = from ta in db.TicketAsset
                                   where ta.idTicket == idTicket
                                   select ta;
 
            if (ticketAssetCount.Count() > 0)
            {
                ticketAsset = db.TicketAsset.SingleOrDefault(ta => ta.idTicket == idTicket);
 
                int asset = Convert.ToInt32(ticketAsset.idAsset);
 
                rcbAsset.Items.FindItemByValue(asset.ToString()).Selected = true;
            }
            else
            {
                rcbAsset.Items.FindItemByValue("0").Selected = true;
            }
        }
    }
}

My question is how can I fill ComboBoxes depending of the selection in the first ComboBox, but within the ItemDataBound event?

Any help would be appreciated!

Regards,

Hrvoje

1 Answer, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 20 Sep 2011, 01:29 PM
Hello Hrvoje,

If you want to populate the other ComboBoxes based on first ComboBox, you need to attach 'onselectedindexchanged' event to the ComboBox and in that enet handler try to populate other ComboBoxes. Sample code is given below.

RadComboBox inside UserControl:-
<telerik:RadComboBox runat="server" ID="RadComboBox1"
    onselectedindexchanged="RadComboBox_SelectedIndexChanged"
    AutoPostBack="True" ></telerik:RadComboBox>

C#: - (UserControl.cs)
protected void RadComboBox_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
{
    RadComboBox btn = (RadComboBox)o;
    GridEditFormItem editItem = (GridEditFormItem)btn.NamingContainer.NamingContainer;
    RadGrid grid = (RadGrid)editItem.NamingContainer.NamingContainer;
    Usercontrol uc = (Usercontrol)grid.NamingContainer;
    // access other comboBoxes in usercontrol using FindControl method and populate it
}

-Shinu.
Tags
Grid
Asked by
Hrvach
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Share this question
or