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

RadGrid Containing ComboBox

7 Answers 161 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Corey
Top achievements
Rank 1
Corey asked on 06 Sep 2011, 03:34 PM
I have a RadGrid, displays strings and ints, and lets you edit them easily.

When I insert, i require a drop down box to be able to select a product, and another drop down box which will let you select units (count, box of 12, case of 4 boxes) etc.  Each Unit is dependent on the Product selected.

Currently the first drop down box has an SelectedIndexChanged Event, which will update the ObjectDataSource and requery.

Now I need to be able to grab the second (unit) Combobox, and do a rebind.

It seems since it's in an insert row, it's difficult to find the control in the grid.

Any Suggestions?

7 Answers, 1 is accepted

Sort by
0
Jayesh Goyani
Top achievements
Rank 2
answered on 06 Sep 2011, 05:06 PM
Hello,

protected void ddlProduct_indexchanged(object sender, EventArgs e)
{
       DropDownList ddlProduct = (DropDownList)sender;
       GridEditFormItem editItem = (GridEditFormItem)ddlProduct.NamingContainer;
       DropDownList ddlUnit = (DropDownList)editItem.FindControl("ddlUnit");
      // bind your dropdown here
       ddlUnit.DataSource = "Your DataSource";
          ddlUnit.DataTextField = "text";
          ddlUnit.DataValueField = "value";
       ddlUnit.DataBind();
         
}

Thanks,
Jayesh Goyani
0
Corey
Top achievements
Rank 1
answered on 06 Sep 2011, 05:41 PM
Thanks Jayesh.

Below is my code:
protected void cboItem_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
    ODSUnitList.SelectParameters["id"].DefaultValue = e.Value;
    ODSUnitList.Select();
 
    GridDataInsertItem editItem = (GridDataInsertItem)((RadComboBox)sender).NamingContainer;
 
    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataSource = ODSUnitList;
    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataBind();
}

This works wonderfully, However, Since RadComboBox1 is bound to the new row, when i hit the databind, it returns:
Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

Any suggestions on how to still stay bound and update the data?  The values returned are 1, 2 or 3, and the text changes.
0
Jayesh Goyani
Top achievements
Rank 2
answered on 06 Sep 2011, 05:57 PM
Hello,

Yes, Please provide your ASPX page code.

or

Your code should like.
<telerik:GridTemplateColumn UniqueName="ContactTitle" HeaderText="ContactTitle">         
     <EditItemTemplate>  
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" SelectedValue='<%# Bind("ContactTitle") %>' DataSourceID="SqlDataSource1" DataTextField="ContactTitle" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"  >
            </asp:DropDownList>     
     </EditItemTemplate>  
</telerik:GridTemplateColumn>  
    
<telerik:GridTemplateColumn UniqueName="TemplateColumn">  
     <EditItemTemplate>  
         <asp:DropDownList ID="DropDownList2"  runat="server">  
          </asp:DropDownList>      
     </EditItemTemplate>  
</telerik:GridTemplateColumn>
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
           DropDownList ddl1 = (DropDownList)sender;  
           GridEditableItem editedItem = ddl1.NamingContainer as GridEditableItem;  
           DropDownList ddl2 = editedItem.FindControl("DropDownList2") as DropDownList;  
          // change the data source for ddl2 here  
           .....         
    }


Let me know if any concern.

Thanks,
Jayesh Goyani
0
Corey
Top achievements
Rank 1
answered on 06 Sep 2011, 06:23 PM
Below is the aspx snippet:

<telerik:GridTemplateColumn DataField="ItemDescription" FilterControlAltText="Filter ItemDescription column"
    HeaderText="ItemDescription" SortExpression="ItemDescription" UniqueName="ItemDescription">
    <EditItemTemplate>
        <asp:Label runat="server" ID="lblItemDescription" Text='<%# Bind("ItemDescription") %>'></asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label runat="server" ID="lblItemDescription" Text='<%# Bind("ItemDescription") %>'></asp:Label>
    </ItemTemplate>
    <InsertItemTemplate>
        <telerik:RadComboBox ID="cboItem" runat="server" DataSourceID="ODSItems" DataTextField="Description"
            DataValueField="InventoryItemID" SelectedValue='<%# Bind("ItemID") %>' AutoPostBack="true" OnSelectedIndexChanged="cboItem_SelectedIndexChanged" />
    </InsertItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Unit" SortExpression="Unit" UniqueName="Unit">
    <ItemTemplate>
        <asp:Label runat="server" ID="lblUnit" Text='<%# Bind("Unit") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <telerik:RadComboBox ID="RadComboBox1" runat="server" DataSourceID="ODSUnitList"
            DataTextField="UnitDescription" DataValueField="UnitValue" SelectedValue='<%# Bind("UnitID") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="*"
            ControlToValidate="RadComboBox1" ForeColor="Red" SetFocusOnError="true" Display="Dynamic" />
    </EditItemTemplate>
</telerik:GridTemplateColumn>
0
Jayesh Goyani
Top achievements
Rank 2
answered on 06 Sep 2011, 07:07 PM
Hello,

<telerik:RadComboBox ID="RadComboBox1" runat="server" 
            />



protected void cboItem_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
...............
...............
    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataSource = ODSUnitList;
    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataTextField = "UnitDescription";

    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataValueField = "UnitValue";
    ((RadComboBox)editItem.FindControl("RadComboBox1")).DataBind();
}

and assign selectedvalue to radcombobox in ItemDataBound Event.

Thanks,
Jayesh Goyani
0
Corey
Top achievements
Rank 1
answered on 06 Sep 2011, 08:11 PM
This doesn't work because it hits the RadGrid1_InsertCommand, before the RadGrid1_ItemDataBound.
0
Jayesh Goyani
Top achievements
Rank 2
answered on 07 Sep 2011, 05:41 AM
Hello,

You also have to bind Your DropDown in ItemDataBound also.
<MasterTableView DataKeyNames="UnitID" />
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            GridDataItem item = (GridDataItem)e.Item;
             
            RadComboBox cmb = item.FindControl("RadComboBox11") as RadComboBox;
            cmb.DataSource = "Your datasource";
            cmb.DataTextField = "UnitDescription";
            cmb.DataValueField = "UNitValue";
            cmb.DataBind();
 
            if(string.IsNullOrEmpty(Convert.ToString(item.GetDataKeyValue("UnitID"))))
            {
                cmb.SelectedValue = item.GetDataKeyValue("UnitID").ToString();
            }
        }
    }



Thanks,
Jayesh Goyani
Tags
Grid
Asked by
Corey
Top achievements
Rank 1
Answers by
Jayesh Goyani
Top achievements
Rank 2
Corey
Top achievements
Rank 1
Share this question
or