Error in DropDownList using ASP.NET - asp.net

I have a DropDownList called (DDL) in ASP.net page, I want that DDL contains some records of a table in the data base.
So I did this :
DDL.DataSource = myDataReader
DDL.DataBind()
But it's giving me (5 records) "the number of records of the table" but like this :
System.Data.Common.DataRecordInternel
System.Data.Common.DataRecordInternel
System.Data.Common.DataRecordInternel
System.Data.Common.DataRecordInternel
System.Data.Common.DataRecordInternel

You should set DataTextField and DataValueField, otherwise data binding will perform .ToString() on every row and put it as item:
DDL.DataSource = myDataReader;
DDL.DataTextField = "[Text column name]";
DDL.DataValueField = "[Value column name]";
DDL.DataBind();

you have to set the text and the key fields of the ddl before you databind
DDL.DataTextField = "textColumn";
DDL.DataValueField = "textColumn":

The code : ddl.datasource=reader is just setting the content present in reader (array of columns of table) as the main source of data.Now as ddl show only a single column in it so u need to write a piece of code which tells ddl that which column it has to display.So you will write: ddl.textfield="column name which you want to show";
and ddl.valuefield="column name which you want as a reference to pass to database";

Related

Populate DropDownList with ArrayList set Text and Data Fields

I am trying to populate a dropdownlist with queried data based on the selection of another dropdownlist. My first query returns a list of IDs using the following code:
Dim selectQuery = (From train In trainerEntities.TrainerTrainingCompanies
Where train.TrainingCompanyID = trainingCompany.ID
Select train.TrainerID).ToList()
I then create an arraylist and a second query
Dim trainers As New ArrayList
For Each trainerID In selectQuery
Dim selectQuery2 = (From pers In trainerEntities.Persons
Where pers.Person_ID = trainerID
Select pers.Person_ID, pers.Last_Name).ToList()
trainers.Add(selectQuery2)
Next
Finally I use the arraylist as a datasource and bind the data
TrainerDropDownList.DataSource = trainers
TrainerDropDownList.DataBind()
The list populates, but not with any data. It looks like this:
System.Collections.Gerneric.List'1[VB$AnonymousType_0'2[System.Int32,System.String]]
When debugging and looking at the array list I see the proper amount of items and the proper information in each specific item. Looking at what the list is populated with from above I am sure the Int32 value is the Person_ID and what I want to use for the dropdownlist value field and the String value is the Last_Name and what I want to used for the dropdownlist text field.
Using:
dropdownlist.DataTextField("Last_Name")
dropdownlist.DataValueField("Person_ID")
produces and error on databind.
does not contain a property with the name 'trainers.Last_Name'
How do I properly use this arraylist as my datasource for my dropdownlist
I rethought how I was gathering the data on selectQuery2. Instead of looping through the results, I altered the "where" clause of the LINQ query to what I believe is a called a lambda expression. This allows me to use my select query and match the person IDs.
Dim selectQuery2 = (From pers In trainerEntities.Persons
Where selectQuery.Any(Function(x) pers.Person_ID.Equals(x))
Select pers.Person_ID, pers.Last_Name).ToList()
The where clause now essentially says select where Person_ID = any of the original selectQuery results.
From here selectQuery2 can be used as the data source with Last_Name and Person_ID as the text and value fields.
TrainerDropDownList.DataSource = selectQuery2
TrainerDropDownList.DataTextField = "Last_Name"
TrainerDropDownList.DataValueField = "Person_ID"
TrainerDropDownList.DataBind()

Get DataRow from the DropDownList

I doesn't know how to convert the dropdownlist selected item to datarow
sDropDownList.DataSource = GetTable();
sDropDownList.DataTextField = "Name";
sDropDownList.DataValueField = "ID";
I tried to get the datarow from the dropdownlist like this.. .
DataRow row = (sDropDownList.SelectedItem as DataRowView).Row;
But i get an error .. . errors like Can't convert listitems to datarows
It's not a DataRow on postback. A DropDownList's item has a Text and a Value since it's a ListItem. If you need the other informations from the record later (on postback) you have to query the database again.
Actually you have all you need since you've set the DataValueField to the ID-column.
int id = int.Parse(sDropDownList.SelectedValue);
// now query the database to get the whole record or the information you need

Binding repeater to a record?

I need to bind repeater with some structure that has only a record. Data table is already populated. I tried to bind it with a datarow or datarowview but it do not allow to do. Any suggestion please ?
Can I use Linq query for that ? If so can you please guide me the query for selecting first row of data table ?
Try this
Dim drList As New List(Of DataRow)
drList.Add(myDataTable.Rows(0)) 'add the first row in the datatable
myRepeater.DataSource = drList

System.Data.DataRowView is selected when i applied a datasource to the DropDownList.....How to get data in it of applied datasource?

'System.Data.DataRowView' is added in dropdownlist..
If applied data contains 5 records then it appears 5 times in list
help....
Assign the column names of data source to DataTextField and DataValueField of the dropdownlist.
E.g.
ddl.DataTextField = "TextColumnName";
ddl.DataValueField = "ValueColumnName";
ddl.DataSource = dt;
ddl.DataBind();

Format BoundField Data Types Dynamically

I'm using a CheckBoxList to define which columns are displayed in a GridView. I populate the CheckBoxList using a query like
select column_name, data_type from information_schema.columns
where table_name = 'myTable'
After the user has chosen the columns (with various Data Types in them) they wish to display, they press a button and the following snippet of VB code generates the GridView.
For Each item As ListItem In chooseColsList.Items
If item.Selected Then
Dim bf As New BoundField()
'PRODUCES BUGGY RESULTS BECAUSE APPLIED TO ALL BoundFields
bf.DataFormatString = "{0:dd-MMM-yyyy}"
bf.ApplyFormatInEditMode = True
bf.DataField = item.Value
bf.HeaderText = item.Value
bf.SortExpression = item.Value
statusReportGrid.Columns.Add(bf)
End If
Next
What I want to do is to apply the DataFormatString ONLY to the columns with a 'date' Data Type in them. However, I have found no way of programmatically determining the Type of the data in the column being bound, no any way of passing this info to the Control. This information exists in the information_schema, as shown in my query, but I don't know how to extract that out and use it to dynamically setup my BoundFields. It is important to note that I'm using an SqlDataSource.
I've experimented with just about every possible solution I can think of and end up here.
Thanks in advance for your help, it is VERY appreciated :)
If you set your check box list like this:
<asp:checkboxlist id="list" runat="server"
DataTextField="column_name" DataValueField="data_type" DataSourceID="YourDSID" />
You should be able to iterate through the items and check the value of the current Item like so:
For Each item As ListItem In chooseColsList.Items
If item.Selected Then
Dim bf As New BoundField()
If StrComp(item.Value,"date") = 0 Then 'Or however datetime is returned
bf.DataFormatString = "{0:dd-MMM-yyyy}"
bf.ApplyFormatInEditMode = True
End If
bf.DataField = item.Text
bf.HeaderText = item.Text
bf.SortExpression = item.Text
statusReportGrid.Columns.Add(bf)
End If
Next

Resources