C# - Populate A List Box With Many Categories Using Recursive Programming?
Mar 18, 2011
I have a categories table which is set up to allow an infinite number of sub category levels. I would like to mimic the following:It should be clarified that sub categories can have sub categories. E.g. Parent cat -> level 1 -> level 2 -> level 3 etc.My categories table has two columns, CategoryName and ParentID.This list box will be used when assigning the correct category to a product.How can I write this?EditIn response to thedugas I had to modify your answer to work with my situation. I found some errors that needed to be fixed, but below is a final, working solution.
protected void Page_Load(object sender, EventArgs e)
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
i can query to get my parent list and pass that into the partial view. Im running into problems when i try and make a recurisve call to the view. i cant figure out how to pass the second group back in.
I am stuck at this point "Displaying a dropdown list of Categories with a --None -- Option. I want the gridview control to display 2 dropdown list one in read-only mode and the other in edit mode. When a record is in read-only mode, the dropdownlist's enabled property will be set to false."When it's on a read-only mode, it doesn't display the selected Category. it shows but the "No Category". When i click on edit to edit or change category, it doesn't display the selected category.
The example is given below( I am reading the book Sams Teach yourself ASP.NET 2.0 by Scott Mitchell. page 628)
<asp:Label ID="UserIdValue" runat="server" Visible="False"></asp:Label> <asp:SqlDataSource ID="picturesDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Pictures] WHERE ([UserId] = @UserId) ORDER BY [UploadedOn] DESC" DeleteCommand="DELETE FROM [Pictures] WHERE [PictureID] = @PictureID" InsertCommand="INSERT INTO [Pictures] ([UserId], [CategoryID], [Title], [Description], [UploadedOn]) VALUES (@UserId, @CategoryID, @Title, @Description, @UploadedOn)" UpdateCommand="UPDATE [Pictures] SET [UserId] = @UserId, [CategoryID] = @CategoryID, [Title] = @Title, [Description] = @Description, [UploadedOn] = @UploadedOn WHERE [PictureID] = @PictureID"> <DeleteParameters> <asp:Parameter Name="PictureID" Type="Int32" /> </DeleteParameters> <InsertParameters> <asp:Parameter Name="UserId" /> <asp:Parameter Name="CategoryID" Type="Int32" /> <asp:Parameter Name="Title" Type="String" /> <asp:Parameter Name="Description" Type="String" /> <asp:Parameter Name="UploadedOn" Type="DateTime" /> </InsertParameters> <SelectParameters> <asp:ControlParameter ControlID="UserIdValue" Name="UserId" PropertyName="Text"/> </SelectParameters> <UpdateParameters> <asp:Parameter Name="UserId"/> <asp:Parameter Name="CategoryID" Type="Int32" /> <asp:Parameter Name="Title" Type="String" /> <asp:Parameter Name="Description" Type="String" /> <asp:Parameter Name="UploadedOn" Type="DateTime" /> <asp:Parameter Name="PictureID" Type="Int32" /> </UpdateParameters> </asp:SqlDataSource> <br /> <asp:SqlDataSource ID="categoriesDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [CategoryID], [Name] FROM [Categories] WHERE ([UserId] = @UserId)"> <SelectParameters> <asp:ControlParameter ControlID="UserIdValue" Name="UserId" PropertyName="Text" /> </SelectParameters> </asp:SqlDataSource> <br /> <asp:SqlDataSource ID="maxPictureIDDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT MAX(PictureID) FROM Pictures WHERE UserId = @UserId"> <SelectParameters> <asp:ControlParameter ControlID="UserIdValue" Name="UserId" PropertyName="Text" /> </SelectParameters> </asp:SqlDataSource> <br /> <asp:Label ID="cannotUploadImageMessage" runat="server" Text="The photo could not be added to your album either because you did not specify a file to upload or the file specified was not a JPEG image with the file extension .JPG"></asp:Label> <br /> <asp:DetailsView ID="dvPictureInsert" runat="server" DataSourceID="PicturesDataSource" Height="50px" Width="125px" AutoGenerateRows="False" CellPadding="4" DataKeyNames="PictureID" DefaultMode="Insert" ForeColor="#333333" GridLines="None"> <AlternatingRowStyle BackColor="White" /> <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" /> <EditRowStyle BackColor="#2461BF" /> <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" /> <Fields> <asp:TemplateField HeaderText="Picture"> <InsertItemTemplate> <asp:FileUpload ID="imageUpload" runat="server" /> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="imageUpload" Display="Dynamic" ErrorMessage="There was no file selected" ValidationGroup="PictureAdd"></asp:RequiredFieldValidator> </InsertItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Category" SortExpression="CategoryID"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CategoryID") %>'></asp:TextBox> </EditItemTemplate> <InsertItemTemplate> <asp:DropDownList ID="pictureCategory" DataSourceID="categoriesDataSource" runat="server" DataTextField="Name" DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>' Visible='<%# Bind("CategoryID") %>' AppendDataBoundItems="True"> <asp:ListItem Selected="True" Value="">-- Select Category --</asp:ListItem> </asp:DropDownList> </InsertItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryID") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Title" SortExpression="Title"> <EditItemTemplate> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Title") %>'></asp:TextBox> </EditItemTemplate> <InsertItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Title") %>'></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="you must provide a name for the title" ValidationGroup="PictureAdd"></asp:RequiredFieldValidator> </InsertItemTemplate> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Title") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Description" SortExpression="Description"> <EditItemTemplate> <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Description") %>'></asp:TextBox> </EditItemTemplate> <InsertItemTemplate> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Description") %>'
I am trying to put a list of categories on my shared master page, I have it working by passing my list of categories to the shared master page in a viewdata[] object - Problem I have is I now want to loop through and out put the links to my categories (Which I am doing this)
I have a ListView inside my UserControl which is showing a list of posts from the table named posts. I've also got a category table which is full of the categories. I then have another table which contains the PostID and the CategoryID so that posts can have multiple categories. I was wondering, in my ListView at the moment I only have a list of the posts but I would like to add, for every post in the listview, the cateogires it is in.
I want to add unlimited categories and sub categories facility, But I couldn't solve it for last two days.
1. DB
CategID,CategName,parentid
Data:
CategID CategName Parent ID 1 Electronics 0 (where 0 means it is main category) 2 TV 1 (Self Join whith the categ id Electronics) 3 Panasonic 2 4 LG 2 5 Toys 0 6 Girls Toys 5 7 Boys Toys 5 8 Criket Related 7 9 Dolls 6
Here I want to display this data in Combo Box like
I have a repeater that displays a list of job openings. I now need to modify the repeater and break out the job openings by category.
See below for the existing code for my repeater. I'm not sure how I need to modify my repeater to display the jobs under the appropriate categories.
I've added a new JobsCategory table to the database and added the foreign key relationship between my jobListing table and the jobcategory table.
I've created a new stored procedure to pull the jobs my category:
CREATE PROCEDURE [dbo].[GetJobsByCategory] @categoryId int AS BEGIN SET NOCOUNT ON SELECT j.JobID, j.JobTitle, j.URL, j.City, j.State, j.Country, c.CategoryName FROM ADPJobListing j INNER JOIN ADPJobCategory c ON j.CategoryID = c.CategoryID WHERE j.CategoryID = @categoryId END
In my typed dataset (tableadapter), I'll add a new query to the above stored procedure and finally in my business logic layer, I'll add a new method to call down into my data access layer:
[DataObjectMethod(DataObjectMethodType.Select, false)] public ADP.JobsDataTable GetJobsByCategory(int categoryId) { return this.Adapter.GetJobsByCategory(categoryId); }
How do I need to modify my repeater to display the jobs by category?
Nested Repeater Issue: Each category list gets populated with the same set of date values rather then being populated with the data associated with that category. Trying to Do: Trying to group FAQ's by category and then list them using the repeaters.
The data is queryed though a business logic layer object that makes a call to the data access layer object. The data access layer object uses linq to sql to return data. There are 3 parameters that are passed into the innerDataSource's ObjectDataSource control to populate the nested repeater control (propID, CatID, isVisible).
With the debugger, the correct data is being returned and written to the nested repeater firing from the nested repeater's ItemDataBound event. Once this event is finished, another event fires and runs the FAQRule object again on the business logic layer which re-populates the nested repeater with the same data for each category. I have 2 repeaters, outerRepater (parent) and innerRepeater(child) with 2 ObjectDataSource controls innerDataSource and outerDataSource. See code below : ASP Page:
I have string which came from the database,now i want to compare each charater of the string with the radiobuttonlist value and check box list value and select both radiobutton list and checkboxlist.
Here i write down some code but its just select 2 item of the each radiobuttonlist and checked all checkboxlist.
I'm designing my own custom control that contains a .NET dropdownlist. What I'm wondering is if it is possible to populate my dropdownlist with listitems placed in a placeholder? For example:
This doesn't work because the DropDownList control only allows ListItems as child controls. But, I want to do something similar to this so when the user includes my control on a page, they can do something like this:
I am building a little app to upload a picture and various downloads for different file types for the photos, but I also need be able to select the catergory they will go into. So I have two tables one that stores the catergory names and one that holds the paths to the photos and downloads the tables are related through the catergoryID.
What I need is those catergories to show up in the photo's and downloads table so that when I go to upload the photos I will be able to select the categories.
I have also built the DataSet and the Business Logic.
I need to populate a listbox, however, the value on the second box needs to derive from the first one, such as when I click on North America, USA and Canada would show up. the tricky part is that I need to be able to select North America and Europe in the same time and 2nd list box needs to show USA, Canada, UK, Italy, German accordingly.
A1: North America A2: Europe A3: Asia B1: USA B2: Canada C1: UK C2: Italy C3: German D1: China D2: India
but I am rather confused about what to invest in. I heard that server-side code translates into client-side code. So, if you have an .aspx file, it will be converted to HTML/CSS/JavaScript. I have experience with the latter three technologies put into a rather dull text file and rendered by a web browser. My question is how much HTML/CSS/Javascript coding would I have to do when server-side programming? In other words, can someone using ASP.NET program purely on the server side and not bother to write for the client side? Of course, I don't care about server-side being translated into client-side, but I am wondering if client-side programming needs to be done explicitly and to what degree.
I have a list of Categories which I need to bind to a TreeView control in WPF and I can't find a working tutorial or get it working.My Category class consist of (ID, Title, ParentID). If the Category is a top level category the parentID is null.Can anyone sow me how to bind this to a treeview?
I am having trouble populating a database that is shown in a list box. The user uses a text box to enter an ID and the ID will bring up information. The problem I am having is in the highlighted area. It says The expression contains an invalid string constant: '1010. where 1010 is what i entered in the text box to test it.
i've run into small problem, here's the thing: i've got a dropdown list (ddlist1) that i am populating from a database, that works fine. However, depending on the option selected here, i need to populate another dropdown list (ddlist2). for example, if on ddlist1 i select option 1, on ddlist 2 i should get a list of options related to option 1 from ddlist1. If i select option 2, on ddlist 2 i should get a list of options related to option 2 from ddlist 1. and so forth. this information with which ddlist needs to be filled, comed from another database. o how can i go about this? m not sure yet how to code the second ddlist.
Is it possible to populate the values of a drop down list inside a repeater when the user chooses to activate the drop down list? I have a page that has 2300 rows of data generated by a repeater. The users have the option of showing a drop down list or not. If the drop down list is shown, right now I bind the values in the drop down list at the time the repeater is generated so they are available immediately.However, this adds an additional 2mb of data to the page, which increases the amount if time that it takes to render the page. I am being asked to decrease the page size. The idea they have is that if I only load the first value of the drop down list into the repeater, the amount of data on the page would drop significantly (which it does).
The problem becomes, how do I then load the remaining items into the drop down list when the user SELECTS the drop down list? These aren't static values, they are completely dependent on the data row key, so I have to go out to the DB and get the values for that individual row.I thought maybe AJAX and jquery, but can that be done inside the repeater?Ayone have any ideas as to if/how this could be done? Personally, I think the users should be educated that it is going to take an additional 5 seconds for the page to load if they choose to display the dropdowns, but the business is hesitant to go that route.
I am developing an MVC application. As part of the functionality I am using jQuery to invoke a server side Action method. This method returns an array of strings. I would like to display the list of strings in a select list using jQuery. e.g. I would like to see the following html:
<select name="CompleteAddress" onchange="Run()" id="CompleteAddress"> <option>22, Random Address</option> <option>24, Random Address</option> <option>26, Random Address</option> </select>
The values "22 Random Address" etc... come from the Action method.
Currently, I am invoking the action method as follows:
i have 3 dropdown list box 3rd dropdown populate depending on 2nd drop down and 2nd drop down populate depnding on 1st value of drop down in asp .NET C#