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

[Solved] Dynamically add rows with two radcombo boxes each

2 Answers 98 Views
ComboBox
This is a migrated thread and some comments may be shown as answers.
Jay Mehta
Top achievements
Rank 1
Jay Mehta asked on 14 Oct 2009, 03:44 AM
HI,

I am able to add the rows dynamically and preserve the state of it when I just have one radcombo and one textbox, but when I have 2 related radcombobox's (instead of a dropdown and a textbox) for each dynamic row created. On the selection of the first radcombobox's, the second should be populated (for eg. if the person selects state in the first radcombo, the second should populate with the list of states.) 
I tried doing this, I am binding the second drop down box on the selected_indexchange event of the first dropdown, that works fine, but now when I try to add a row , it gives me error on the radgrid.rebind(). Because it is not finding any items in the second radcombobox after the reload.
Any help on this.
<telerik:RadGrid ID="RadGrid1" AutoGenerateColumns="false" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" >  
                <MasterTableView>  
                    <Columns>   
                        <telerik:GridTemplateColumn UniqueName="TemplateColumn2" HeaderText="Filter Type">  
                            <ItemTemplate>  
                                <telerik:RadComboBox ID="rcbFilterType" AppendDataBoundItems="true" SelectedValue='<%#Eval("Selected1") %>' runat="server" OnSelectedIndexChanged="rcbFilterType_SelectedIndexChanged" AutoPostBack="true"
                                <Items> 
                                <telerik:RadComboBoxItem Value="" Text=""/> 
                                <telerik:RadComboBoxItem Value="0" Text="Keyword"/> 
                                <telerik:RadComboBoxItem Value="1" Text="State"/> 
                                <telerik:RadComboBoxItem Value="2" Text="Provider"/> 
                                <telerik:RadComboBoxItem Value="3" Text="Faculty"/> 
                                </Items> 
                                </telerik:RadComboBox> 
                            </ItemTemplate>  
                        </telerik:GridTemplateColumn>  
                        <telerik:GridTemplateColumn UniqueName="TemplateColumn1" HeaderText="Filter Options">  
                            <ItemTemplate>  
                                <telerik:RadComboBox ID="rcbFilterOptions" AppendDataBoundItems="true" SelectedValue='<%#DataBinder.Eval(Container.DataItem,"Selected2") %>' runat="server"
                                </telerik:RadComboBox> 
                            </ItemTemplate>  
                        </telerik:GridTemplateColumn>  
                         
                    </Columns>  
                </MasterTableView>  
        </telerik:RadGrid> 

Imports System.Web 
Imports System.Web.SessionState 
Imports System.Web.UI 
Imports System.Web.UI.WebControls 
Imports System.Web.UI.HtmlControls 
Imports System.Data 
Imports Telerik.Web.UI 
Imports System.Data.SqlClient 
 
Partial Class Dailog2 
    Inherits System.Web.UI.Page 
    Public dt As DataTable 
    Public _store As String = "FilterTable" 
 
    Protected Sub form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Form2.Load 
        If Not IsPostBack AndAlso ViewState("dt") = Nothing Then 
            If Session(_store) Is Nothing Then 
                dt = New DataTable() 
                dt.Columns.Add(New DataColumn("Selected1", GetType(String))) 
                dt.Columns.Add(New DataColumn("Selected2", GetType(String))) 
                'Cache.Remove(_store) 
            Else 
                dt = DirectCast(Session(_store), DataTable) 
            End If 
        Else 
            ' Cache.Remove(_store) 
            dt = DirectCast(ViewState("dt"), DataTable) 
 
        End If 
 
    End Sub 
 
    Private Function AddRow(ByVal dt As DataTable) As DataTable 
        ' method to create row         
        Dim dr As DataRow = dt.NewRow() 
        dr("Selected1") = "" 
        dr("Selected2") = "" 
        dt.Rows.Add(dr) 
        Return dt 
    End Function 
 
    Protected Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
 
        Dim dt As DataTable = DirectCast(ViewState("dt"), DataTable) 
        For Each item As GridDataItem In RadGrid1.Items 
            Dim ddl1 As RadComboBox = DirectCast(item.FindControl("rcbFilterType"), RadComboBox) 
            Dim ddl2 As RadComboBox = DirectCast(item.FindControl("rcbFilterOptions"), RadComboBox) 
            Dim i As Integer = 0 
 
            While i < dt.Rows.Count 
                If iitem.ItemIndex = i Then 
                    dt.Rows(i)(0) = ddl1.SelectedValue 
                    dt.Rows(i)(1) = ddl2.SelectedValue 
                End If 
                System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) 
            End While 
        Next 
 
        ViewState("dt") = AddRow(dt) 
        RadGrid1.Rebind() 
    End Sub 
 
    Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) 
        If Not IsPostBack Then 
            ViewState("dt") = dt 
            RadGrid1.DataSource = dt 
        Else 
            dt = DirectCast(ViewState("dt"), DataTable) 
            RadGrid1.DataSource = dt 
        End If 
    End Sub 
 
    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click 
        Dim dt As DataTable = DirectCast(ViewState("dt"), DataTable) 
        For Each item As GridDataItem In RadGrid1.Items 
            Dim ddl1 As RadComboBox = DirectCast(item.FindControl("rcbFilterType"), RadComboBox) 
            Dim ddl2 As RadComboBox = DirectCast(item.FindControl("rcbFilterOptions"), RadComboBox) 
            Dim item1 As New RadComboBoxItem() 
            item1.Text = "key1" 
            item1.Value = "0" 
            Dim i As Integer = 0 
            While i < dt.Rows.Count 
                If iitem.ItemIndex = i Then 
                    dt.Rows(i)(0) = ddl1.SelectedValue 
                    dt.Rows(i)(1) = ddl2.SelectedValue 
                    
                End If 
 
                System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) 
            End While 
        Next 
        If (Not ClientScript.IsStartupScriptRegistered("return")) Then 
            Page.ClientScript.RegisterStartupScript(Me.GetType(), "return", "returnToParent();", True) 
        End If 
    End Sub 
 
    Protected Sub rcbFilterType_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
        Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString) 
        Dim query As String = "" 
 
        Dim ddl1 As RadComboBox = CType(sender, RadComboBox) 
        Dim DataItem As GridDataItem = CType(ddl1.NamingContainer, GridDataItem) 
        Dim ddl2 As RadComboBox = DirectCast(DataItem.FindControl("rcbFilterOptions"), RadComboBox) 
 
        If ddl1.SelectedValue = 0 Then 
            query = "SELECT CategoryID as ID, CategoryName as NAME FROM Categories" 
        ElseIf ddl1.SelectedValue = 1 Then 
            query = "SELECT CategoryID as ID, CategoryName as NAME FROM Categories" 
        ElseIf ddl1.SelectedValue = 2 Then 
            query = "SELECT CategoryID as ID, CategoryName as NAME FROM Categories" 
        Else 
            query = "SELECT CategoryID as ID, CategoryName as NAME FROM Categories" 
        End If 
        Dim adapter As New SqlDataAdapter(query, connection) 
        Dim dt As New DataTable() 
        adapter.Fill(dt) 
 
        ddl2.DataTextField = "Name" 
        ddl2.DataValueField = "ID" 
        ddl2.DataSource = dt 
        ddl2.DataBind() 
    End Sub 
 
    
End Class 
 



2 Answers, 1 is accepted

Sort by
0
Vesko
Top achievements
Rank 2
answered on 16 Oct 2009, 07:27 AM
You can check the following code-library:

Using related RadComboBoxes in RadGrid


It should give you a hint how to start.
0
Jay Mehta
Top achievements
Rank 1
answered on 16 Oct 2009, 02:03 PM
Hi Sean,

Thank you for that post, but that does not solve my problem, I am able to get the related combo populated, but problem happens, when I added a new row on a button click. It basically preserves the row count in the viewstate and when the page is loaded again, it create the grid with the previous rows and columns with their values. This works fine when I have a radcombo box and a textbox. But problem happens with the related rad combo box's. The first rad combo box has the items so it binds properly on recreation of grid, but the second rad combo box does not have any items bounded to it by default and the value goes out of the range and the error comes.

Any help is appreciated. 
Thank you,
Jay Mehta.
Tags
ComboBox
Asked by
Jay Mehta
Top achievements
Rank 1
Answers by
Vesko
Top achievements
Rank 2
Jay Mehta
Top achievements
Rank 1
Share this question
or