wmorales
asked on
Item index change in a drop down list (ddl) using VB.Net
In VB.Net, how can I change the index (0, 1, 2, 3...) of an item of a drop down list (ddl)?
My case: I want to change a specific item's index to "0" so it is the first in list.
p.s. Don't tell me to use Properties/Misc/Items because that wont work in this case is not that simple. If anymore details are needed please let me know.
My case: I want to change a specific item's index to "0" so it is the first in list.
p.s. Don't tell me to use Properties/Misc/Items because that wont work in this case is not that simple. If anymore details are needed please let me know.
is your ddl bound to some datasource?
true I should have asked that if it is just change the index in the bound collection ...
ASKER
and I would declare the tmp variable as what
ASKER
yes is bound to a datasource but the last field the one I want to make first isn't I added after the databind, ddl.Items.Add("...")
ASKER
well yes the index of the last item of the collection to 0
either object is fine for a generic move (you are only moving references not accessing the type) or whatever is in items ... (if binding you put your own classes)
ASKER
I kind of get your answer but to be sure ---> dim tmp as ?
if you don't kow how to dim your var , always dim it as Object. It is a little overhead, but it will work
unless you are accessing properties :) then thats evil.
true
:(
:(
ASKER
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca lhost;uid= sa ;pwd= ; database=DATABASE")
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
Dim con As SqlConnection
con = New SqlConnection("Server=loca
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
ASKER
and I do this because I can't have the "..." in the database
ASKER
or don't want to have... either way that’s that
You can make this ddl hidden and
create another unbound ddl where you will add your item and then everything from the hidden ddl
create another unbound ddl where you will add your item and then everything from the hidden ddl
please excuse C# code ...
public static void FillDropDown(System.Web.UI .WebContro ls.DropDow nList _ddl, string _Table, string _DisplayColumn, string _ValueColumn)
{
string ConnectionString = EnterpriseObjects.Enterpri seApplicat ion.Applic ation.Conn ectionStri ng ;
SqlConnection Connection = new SqlConnection(ConnectionSt ring);
SqlCommand objCommand = new SqlCommand("SELECT " + _DisplayColumn+ " as disp," + _ValueColumn + " as val FROM " + _Table, Connection);
Connection.Open();
_ddl.Items.Add(new ListItem("...", "...")
SqlDataReader objReader = objCommand.ExecuteReader() ;
while(objReader.Read()) {
_ddl.Items.Add(new ListItem(objReader.GetValu e(0).ToStr ing(), objReader.GetValue(1).ToSt ring()));
}
objReader.Close();
Connection.Close();
}
public static void FillDropDown(System.Web.UI
{
string ConnectionString = EnterpriseObjects.Enterpri
SqlConnection Connection = new SqlConnection(ConnectionSt
SqlCommand objCommand = new SqlCommand("SELECT " + _DisplayColumn+ " as disp," + _ValueColumn + " as val FROM " + _Table, Connection);
Connection.Open();
_ddl.Items.Add(new ListItem("...", "...")
SqlDataReader objReader = objCommand.ExecuteReader()
while(objReader.Read()) {
_ddl.Items.Add(new ListItem(objReader.GetValu
}
objReader.Close();
Connection.Close();
}
not the prettiest code but it will do exactly what you want ....
ASKER
I'm going to try the hidden concept first then look into the C# algorism.
just add them to the Items collection by yourself thats all its doing
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca lhost;uid= sa ;pwd= ; database=DATABASE")
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
DataTable dt = ds.Tables("DATABASE")
ddl.Items.Add(new ListItem("...", "..."))
for i = 0 to dt.Rows.Count - 1
ddl.Items.Add(new ListItem(dt.Rows(i)(whatev er),dt.Row s(i)(whate ver))
end for
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
Dim con As SqlConnection
con = New SqlConnection("Server=loca
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
DataTable dt = ds.Tables("DATABASE")
ddl.Items.Add(new ListItem("...", "..."))
for i = 0 to dt.Rows.Count - 1
ddl.Items.Add(new ListItem(dt.Rows(i)(whatev
end for
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
oops remove databind call ...
ASKER
I know I did that in another way:
Do While objDataReader.Read() = True
strResultsHolder = objDataReader("FIELD")
ddl.Items.Add(strResultsHo lder)
Loop
I just want to have it without do's or for's
Do While objDataReader.Read() = True
strResultsHolder = objDataReader("FIELD")
ddl.Items.Add(strResultsHo
Loop
I just want to have it without do's or for's
ASKER
I know... :)
what do you think the databinding does ? :)
ASKER
More complete:
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca lhost;uid= sa ;pwd= ; database=DATABASE")
con.Open()
Dim strSQL As String = "SELECT * FROM TABLE"
Dim strResultsHolder As String
Dim objCommand As New SqlCommand(strSQL, conINVENTORY)
Dim objDataReader As SqlDataReader
objDataReader = objCommand.ExecuteReader()
'HERE THE ITEM'S INDEX IS 0 BUT IS NOT WHAT I WANT
'THE WAY I SHOW U BEFORE IS WHAT I WANT... I KNOW I'M LOOKING FOR...
'... TROUBLE WHERE THERE ISN'T ANY BUT HEY...
ddlWORKPLACE_NAME.Items.Ad d("...")
Do While objDataReader.Read() = True
strResultsHolder = objDataReader("TABLE")
ddL.Items.Add(strResultsHo lder)
'ddl.Fill(ds, "TABLE")
Loop
End Sub
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca
con.Open()
Dim strSQL As String = "SELECT * FROM TABLE"
Dim strResultsHolder As String
Dim objCommand As New SqlCommand(strSQL, conINVENTORY)
Dim objDataReader As SqlDataReader
objDataReader = objCommand.ExecuteReader()
'HERE THE ITEM'S INDEX IS 0 BUT IS NOT WHAT I WANT
'THE WAY I SHOW U BEFORE IS WHAT I WANT... I KNOW I'M LOOKING FOR...
'... TROUBLE WHERE THERE ISN'T ANY BUT HEY...
ddlWORKPLACE_NAME.Items.Ad
Do While objDataReader.Read() = True
strResultsHolder = objDataReader("TABLE")
ddL.Items.Add(strResultsHo
'ddl.Fill(ds, "TABLE")
Loop
End Sub
if you use dataset and dataadapter just to retrieve data from the db why dont you use
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca lhost;uid= sa ;pwd= ; database=DATABASE")
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
Dim dr as DataRow = ds.Tables(0).NewRow()
ds.Tables(0).Rows.InsertAt ( dr, 0 )
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
HTH
NSub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca lhost;uid= sa ;pwd= ; database=DATABASE")
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
HTH
B..M
Sub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
Dim dr as DataRow = ds.Tables(0).NewRow()
ds.Tables(0).Rows.InsertAt
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
HTH
NSub FILLddl()
Dim con As SqlConnection
con = New SqlConnection("Server=loca
con.Open()
Dim sql As String
sql = "SELECT * FROM TABLE"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet
da.Fill(ds, "DATABASE")
ddl.DataSource = ds
ddl.DataTextField = "TABLE"
ddl.DataValueField = "FIELD"
ddl.DataBind()
'ITEM THAT I WANT TO CHANGE INDEX TO 0
ddl.Items.Add("...")
End Sub
HTH
B..M
ASKER
is: objDataReader("FIELD") not TABLE
and the: 'ddl.Fill(ds, "TABLE") at the end is a comment ignore that
and the: 'ddl.Fill(ds, "TABLE") at the end is a comment ignore that
sorry, i've missed it
just see if you can get something from the posted code - it is exactly what you want in your question.
I applogies that i didn't read all the posts carefully and i was missed the correction
B..M
just see if you can get something from the posted code - it is exactly what you want in your question.
I applogies that i didn't read all the posts carefully and i was missed the correction
B..M
ASKER
mmarinov
I tried what you said but what it does is that gives a blank item (" '') that does have the index 0 but I don’t what a blank in my ddl and is not the item that I want to have it's index 0
I tried what you said but what it does is that gives a blank item (" '') that does have the index 0 but I don’t what a blank in my ddl and is not the item that I want to have it's index 0
ASKER
Don’t worry I did the same today with somebody else problem.
ASKER
There isn't any other way to change the index other from the solutions we already have isn’t... because with the hidden idea it would work yes, but then it hit me that what I have to do for that to work is the same thing a wanted to omit whit the original ddl in the first place... but thank you anyway.
items.insert()
Public Overridable Sub Insert( _
ByVal index As Integer, _
ByVal item As Object _
) Implements IList.Insert
Public Overridable Sub Insert( _
ByVal index As Integer, _
ByVal item As Object _
) Implements IList.Insert
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
yes my sample add a blank item to your ddl, because i don't know what exactly you want to add - it is just the mechanism
you can use dr(index) od dr(nameofcolumn) and set the needed value to it so when the ddl is binded you will receive the dr at index 0 with the appropriate value and text
B..M
you can use dr(index) od dr(nameofcolumn) and set the needed value to it so when the ddl is binded you will receive the dr at index 0 with the appropriate value and text
B..M
ASKER
YOU GOT IT!!!
ASKER
Yes I know I figured it out
ASKER
So what do I do now do I press Accept on gregoryyoung's
answer?
answer?
ASKER
Yes?
I dunno I have never asked a question :)
ASKER
In a nutshell it all comes down to using Insert and not Add.
ASKER
Thank you all, problem solve... NEXT!
yep .. although you could still add and flip as earlier stated ...
ASKER
Lest stick to the Insert… :)
tmp = ddl.Items[0]
ddl.Items[0] = ddl.Items[5]
ddl.Items[5] = tmp