Answered by:
dropdown in table

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.
ThanksThis 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.00Private 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 NamespaceThe 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