locked
dropdown in table RRS feed

  • Question

  • User1717218719 posted

    I have the following code where when the data is added to the table it is stored in the repeater. the code is working for the most part. the only issue I have with it is that when a new row of data is added to the repeater the dropdown appears in the as COM even if that wasnt the one selected. I am not sure as to why this is happening. any help with this issue would be great.
    Thanks

    This is what my table and repeater look like (textboxs in table and labels in repeater):

    TABLE:
        
    DropDown txtbx txtbx txtbx txtbx Button
          ERR           rt      10      5       5     "ADD" 


    REPEATER:

    DropDown     lbl    lbl     lbl     lbl    
    COM              oo   10      5      5.00  
    COM              yj     10      5      5.00  

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnTaxAdd.Click
    
            '-- create/add to table
            Dim dtbComs As DataTable
            Dim drwRow As DataRowT
    
            dtbComs = New DataTable
    
            dtbComs.Columns.Add(New DataColumn("Type"))
            dtbComs.Columns.Add(New DataColumn("Cde"))
            dtbComs.Columns.Add(New DataColumn("OnComAIR"))
            dtbComs.Columns.Add(New DataColumn("OnComAGT"))
            dtbComs.Columns.Add(New DataColumn("OnComDIF"))
    
            dtbComs.PrimaryKey = {dtbComs.Columns("Cde")}
    
    
            '--------------------------------REPEATER--------------------------------
    
            For Each item As RepeaterItem In rptCom.Items
    
                Dim ddl1 As DropDownList = TryCast(item.FindControl("Dropdownlist4"), DropDownList)
                Dim lbl1 As Label = TryCast(item.FindControl("lblOnComCDE"), Label)
                Dim lbl2 As Label = TryCast(item.FindControl("lblOnComAIR"), Label)
                Dim lbl3 As Label = TryCast(item.FindControl("lblOnComAGT"), Label)
                Dim lbl4 As Label = TryCast(item.FindControl("lblOnComDIF"), Label)
    
                drwRow = dtbComs.NewRow()
    
                drwRow("Type") = ddl1.SelectedItem.Text
                drwRow("Cde") = lbl1.Text
                drwRow("OnComAIR") = lbl2.Text
                drwRow("OnComAGT") = lbl3.Text
                drwRow("OnComDIF") = lbl4.Text
                dtbComs.Rows.Add(drwRow)
    
            Next
    
    
            '-- Add new item
            '-- check if item is already in the datable
            Dim str1 As String = txtOnComCDE.Text
    
            drwRow = dtbComs.Rows.Find(str1)
    
            If Not IsNothing(drwRow) Then
                '-- already in datatable
    
                Dim strTyp As String = DropDownList4.SelectedItem.Text
                Dim str2 As String = txtOnComAIR.Text
                Dim str3 As String = txtOnComAGT.Text
                Dim str4 As String = txtOnComDIF.Text
    
                drwRow("Type") = strTyp
                drwRow("OnComAIR") = str2
                drwRow("OnComAGT") = str3
                drwRow("OnComDIF") = str4
    
                MsgBox("Code Already in DataTable")
                Exit Sub
    
            Else
    
                Dim strTyp As String = DropDownList4.SelectedItem.Text
                Dim str2 As String = txtOnComAIR.Text
                Dim str3 As String = txtOnComAGT.Text
                Dim str4 As String = txtOnComDIF.Text
    
                drwRow = dtbComs.NewRow()
    
                drwRow("Type") = strTyp
                drwRow("Cde") = str1
                drwRow("OnComAIR") = str2
                drwRow("OnComAGT") = str3
                drwRow("OnComDIF") = str4
                dtbComs.Rows.Add(drwRow)
    
            End If
    
    
            '--Bind
            Me.rptCom.DataSource = dtbComs
            Me.rptCom.DataBind()
    
    
            Exit Sub
    
    
            If IsNothing(Session("tblCom")) Then
                dtbComs = New DataTable
            Else
                dtbComs = CType(Session("tblCom"), DataTable)
            End If
    
    
            drwRow = dtbComs.NewRow()
    
    
            drwRow("Cde") = txtOnComCDE.Text
            drwRow("OnComAIR") = txtOnComAIR.Text
            drwRow("OnComAGT") = txtOnComAGT.Text
            drwRow("OnComDIF") = txtOnComDIF.Text
    
    
            dtbComs.Rows.Add(drwRow)
    
            Me.rptCom.DataSource = dtbComs
            Me.rptCom.DataBind()
    
        End Sub

    Thursday, June 20, 2019 1:14 PM

Answers

  • User665608656 posted

    Hi E.RU,

    According to your desription,I suggest you should bind dropdownlist data sources in repeater's OnItemDataBound event firstly.

    Because of the particularity of dropdownlist, when you add data and want to reverse-select the same value in the dropdownlist of repeater, I recommend that you use a hidden label control to accept the value selected by the current dropdownlist.

    For this method,you could refer to this link: https://forums.asp.net/t/1286478.aspx?DropDownList+in+Repeater

    Then you could set the label text value to dropdownlist SelectedValue property in repeater's OnItemDataBound event.

    I have made an example based on your code, you could refer to it:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm_0621_2156902.aspx.cs" Inherits="WebApplication1.Cases.WebForm_0621_2156901" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            table, tr, td {
                text-align: center;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <table style="width: 500px; border-collapse: collapse" border="1">
                    <tr>
                        <td>DropDown</td>
                        <td>txtbx</td>
                        <td>txtbx</td>
                        <td>txtbx</td>
                        <td>txtbx</td>
                        <td>Button</td>
                    </tr>
                    <tr>
                        <td>
                            <asp:DropDownList ID="Dropdownlist4" runat="server"></asp:DropDownList></td>
                        <td>
                            <asp:TextBox ID="txtOnComCDE" runat="server"></asp:TextBox></td>
                        <td>
                            <asp:TextBox ID="txtOnComAIR" runat="server"></asp:TextBox>
                        </td>
                        <td>
                            <asp:TextBox ID="txtOnComAGT" runat="server"></asp:TextBox>
                        </td>
                        <td>
                            <asp:TextBox ID="txtOnComDIF" runat="server"></asp:TextBox>
                        </td>
                        <td>
                            <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />
                        </td>
                    </tr>
                </table>
                <br />
                <br />
                <br />
                <br />
                <asp:Repeater ID="rptCom" runat="server" OnItemDataBound="rptCom_ItemDataBound">
                    <ItemTemplate>
                        <div>
                            <tr>
                                <td>
                                    <asp:DropDownList ID="Dropdownlist4" runat="server"></asp:DropDownList>
                                    <asp:Label ID="lblHidden" runat="server" Visible="false" Text='<%# Eval("Type") %>'></asp:Label>
                                </td>
                                <td>
                                    <asp:Label ID="lblOnComCDE" runat="server" Text='<%# Eval("Cde") %>'></asp:Label>
                                </td>
                                <td>
                                    <asp:Label ID="lblOnComAIR" runat="server" Text='<%# Eval("OnComAIR") %>'></asp:Label>
                                </td>
                                <td>
                                    <asp:Label ID="lblOnComAGT" runat="server" Text='<%# Eval("OnComAGT") %>'></asp:Label>
                                </td>
                                <td>
                                    <asp:Label ID="lblOnComDIF" runat="server" Text='<%# Eval("OnComDIF") %>'></asp:Label>
                                </td>
                            </tr>
                        </div>
                        <br />
                    </ItemTemplate>
                </asp:Repeater>
    
            </div>
        </form>
    </body>
    </html>
    

    code behind:

    Imports System
    Imports System.Collections.Generic
    Imports System.Data
    Imports System.Linq
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    
    Namespace WebApplication1.Cases
        Public Partial Class WebForm_0621_2156901
            Inherits System.Web.UI.Page
    
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
                If Not IsPostBack Then
                    Dim lists As List(Of String) = New List(Of String)() From {
                        "A",
                        "B",
                        "C",
                        "D"
                    }
                    Dropdownlist4.DataSource = lists
                    Dropdownlist4.DataBind()
                End If
            End Sub
    
            Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs)
                Dim dtbComs As DataTable
                Dim drwRow As DataRow
                dtbComs = New DataTable()
                dtbComs.Columns.Add(New DataColumn("Type"))
                dtbComs.Columns.Add(New DataColumn("Cde"))
                dtbComs.Columns.Add(New DataColumn("OnComAIR"))
                dtbComs.Columns.Add(New DataColumn("OnComAGT"))
                dtbComs.Columns.Add(New DataColumn("OnComDIF"))
                dtbComs.PrimaryKey = New DataColumn() {dtbComs.Columns("Cde")}
    
                For Each item As RepeaterItem In rptCom.Items
                    Dim ddl1 As DropDownList = TryCast(item.FindControl("Dropdownlist4"), DropDownList)
                    Dim lbl1 As Label = TryCast(item.FindControl("lblOnComCDE"), Label)
                    Dim lbl2 As Label = TryCast(item.FindControl("lblOnComAIR"), Label)
                    Dim lbl3 As Label = TryCast(item.FindControl("lblOnComAGT"), Label)
                    Dim lbl4 As Label = TryCast(item.FindControl("lblOnComDIF"), Label)
                    drwRow = dtbComs.NewRow()
                    drwRow("Type") = ddl1.SelectedItem.Text
                    drwRow("Cde") = lbl1.Text
                    drwRow("OnComAIR") = lbl2.Text
                    drwRow("OnComAGT") = lbl3.Text
                    drwRow("OnComDIF") = lbl4.Text
                    dtbComs.Rows.Add(drwRow)
                Next
    
                Dim str1 As String = txtOnComCDE.Text
                drwRow = dtbComs.Rows.Find(str1)
    
                If drwRow IsNot Nothing Then
                    Dim strTyp As String = Dropdownlist4.SelectedItem.Text
                    Dim str2 As String = txtOnComAIR.Text
                    Dim str3 As String = txtOnComAGT.Text
                    Dim str4 As String = txtOnComDIF.Text
                    drwRow("Type") = strTyp
                    drwRow("OnComAIR") = str2
                    drwRow("OnComAGT") = str3
                    drwRow("OnComDIF") = str4
    MsgBox("Code Already in DataTable") Return Else Dim strTyp As String = Dropdownlist4.SelectedItem.Text Dim str2 As String = txtOnComAIR.Text Dim str3 As String = txtOnComAGT.Text Dim str4 As String = txtOnComDIF.Text drwRow = dtbComs.NewRow() drwRow("Type") = strTyp drwRow("Cde") = str1 drwRow("OnComAIR") = str2 drwRow("OnComAGT") = str3 drwRow("OnComDIF") = str4 dtbComs.Rows.Add(drwRow) End If Me.rptCom.DataSource = dtbComs Me.rptCom.DataBind() End Sub Protected Sub rptCom_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim gv As DropDownList = TryCast(e.Item.FindControl("Dropdownlist4"), DropDownList) Dim lb As Label = TryCast(e.Item.FindControl("lblHidden"), Label) Dim lists As List(Of String) = New List(Of String)() From { "A", "B", "C", "D" } gv.DataSource = lists gv.DataBind()
    'bind the dropdownlist first
    'then set the label text to dropdownlist SelectedValue gv.SelectedValue = lb.Text.ToString() End If End Sub End Class End Namespace

    The result of my work demo:

    Best Regards,

    YongQing.

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Friday, June 21, 2019 2:15 AM