Two DropDownList controls inside one DataGrid cell

G

Guest

Hi folks,

I have two code test samples that I am trying out. I want to have two
dropdownlist controls. The first ddl is databound with a list of company
names. The second ddl is databound with a list of contact names that reside
within the company that has been selected in the first ddl.

In the first sample, I have code where two dropdownlist controls are not in
a DataGrid. In the second sample, I have two dropdownlist controls that are
inside a cell of a DataGrid control.

The first sample runs fine. In the second sample, I am unclear what I need
to do.
Any reply would be much appreciated.

Here is my code for the first sample.
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Dim dsCompanyNames as DataSet = New DataSet()
Dim dsContacts as DataSet = New DataSet ()
Dim coName As String
Dim proj = "Big Barn"



Sub Page_Load(sender As Object, e as EventArgs)
if not Page.IsPostBack then
ddlCompanyName.DataSource = GetCompaniesForThisProject
( )
ddlCompanyName.DataBind ( )

end if
End Sub



Function GetCompaniesForThisProject() As DataSet
dsCompanyNames.Clear()

Dim strConnString As String =
"Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data
Source=c:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString As String = "SELECT DISTINCT
[users].[cname] FROM [users] WHERE ([users].[project] = '" & proj & "')"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsCompanyNames, "users")

Return dsCompanyNames
End Function



Function GetContactNamesForThisCompanyAndProject() As DataSet
dsContacts.Clear()

Dim strConnString As String =
"Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data
Source=C:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString = "SELECT [users].[name] FROM [users] WHERE
(([users].[cname] = '" & coName & "') AND ([users].[project] = '" & proj &
"'))"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsContacts, "users")

Return dsContacts
End Function



Sub ddlCompanyName_SelectedIndexChanged(sender As Object, e As
EventArgs)
Dim list As DropDownList = CType(sender, DropDownList)
coName=list.SelectedItem.Text

ddlContactName.DataSource =
GetContactNamesForThisCompanyAndProject ( )
ddlContactName.DataBind ( )
End Sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:DropDownList id="ddlCompanyName" runat="server" Width="204px"
AutoPostBack="True" DataValueField="cname"
OnSelectedIndexChanged="ddlCompanyName_SelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList id="ddlContactName" style="Z-INDEX: 100; LEFT:
13px; POSITION: absolute; TOP: 71px" runat="server" Width="202px"
DataValueField="name"></asp:DropDownList>
</form>
</body>
</html>

Here is my code for the second sample.
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Dim dsCompanyNames as DataSet = New DataSet()
Dim dsContacts as DataSet = New DataSet ()
Dim coName As String
Dim proj = "Big Barn"


Function GetCompaniesForThisProject() As DataSet
dsCompanyNames.Clear()

Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;
Ole DB Services=-4; Data
Source=c:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString As String = "SELECT DISTINCT [users].[cname]
FROM [users] WHERE ([users].[project] = '" & proj & "')"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsCompanyNames, "users")

Return dsCompanyNames
End Function


Function GetContactNamesForThisCompanyAndProject() As DataSet
dsContacts.Clear()

Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;
Ole DB Services=-4; Data
Source=C:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString = "SELECT [users].[name] FROM [users] WHERE
(([users].[cname] = '" & coName & "') AND ([users].[project] = '" & proj &
"'))"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsContacts, "users")

Return dsContacts
End Function


Sub ddlCompanyName_SelectedIndexChanged(sender As Object, e As
EventArgs)
Dim list As DropDownList = CType(sender, DropDownList)
coName=list.SelectedItem.Text
Dim ddlContactName as DropDownList
ddlContactName.DataSource =
GetContactNamesForThisCompanyAndProject ( )
ddlContactName.DataBind ( )
End Sub

</script>
<html>
<head>
<form runat="server">
<asp:DataGrid id="DataGrid1" runat="server">
<HeaderStyle backcolor="Navy" forecolor="White" font-size="9pt"
font-bold="True" horizontalalign="Center" />
<PagerStyle backcolor="Navy" forecolor="White" font-size="9pt"
font-bold="True" horizontalalign="Right" nextpagetext="Next >"
prevpagetext="< Prev" />
<Columns>
<asp:EditCommandColumn EditText="Edit" UpdateText="Update"
CancelText="Cancel" ButtonType="LinkButton" />
<asp:BoundColumn DataField="ID" HeaderText="Index<br>Number"
ReadOnly="True" />
<asp:TemplateColumn HeaderText="To">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "cname") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="ddlCompanyName" runat="server"
DataValueField="cname" AutoPostBack="True"
OnSelectedIndexChanged="ddlCompanyName_SelectedIndexChanged" />
<asp:DropDownList id="ddlContactName" runat="server"
DataValueField="name" />
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</head>
<body>
</body>
</html>
 
G

Guest

Hi folks,

Solved my own problem. For anyone interested in this, you need to have the
following snippet inside of your OnSelectedItem subroutine:

Dim list As DropDownList = CType(sender, DropDownList)
coName = list.SelectedItem.Text

Dim cell As TableCell = CType(list.Parent, TableCell)
Dim item As DataGridItem = CType(cell.Parent, DataGridItem)
Dim ddlContact As DropDownList =
CType(item.FindControl("ddlContact"), DropDownList)
ddlContact.DataSource = GetContactsFromCompanyForThisProject ()
ddlContact.DataBind ( )



glenn said:
Hi folks,

I have two code test samples that I am trying out. I want to have two
dropdownlist controls. The first ddl is databound with a list of company
names. The second ddl is databound with a list of contact names that reside
within the company that has been selected in the first ddl.

In the first sample, I have code where two dropdownlist controls are not in
a DataGrid. In the second sample, I have two dropdownlist controls that are
inside a cell of a DataGrid control.

The first sample runs fine. In the second sample, I am unclear what I need
to do.
Any reply would be much appreciated.

Here is my code for the first sample.
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Dim dsCompanyNames as DataSet = New DataSet()
Dim dsContacts as DataSet = New DataSet ()
Dim coName As String
Dim proj = "Big Barn"



Sub Page_Load(sender As Object, e as EventArgs)
if not Page.IsPostBack then
ddlCompanyName.DataSource = GetCompaniesForThisProject
( )
ddlCompanyName.DataBind ( )

end if
End Sub



Function GetCompaniesForThisProject() As DataSet
dsCompanyNames.Clear()

Dim strConnString As String =
"Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data
Source=c:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString As String = "SELECT DISTINCT
[users].[cname] FROM [users] WHERE ([users].[project] = '" & proj & "')"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsCompanyNames, "users")

Return dsCompanyNames
End Function



Function GetContactNamesForThisCompanyAndProject() As DataSet
dsContacts.Clear()

Dim strConnString As String =
"Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data
Source=C:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString = "SELECT [users].[name] FROM [users] WHERE
(([users].[cname] = '" & coName & "') AND ([users].[project] = '" & proj &
"'))"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsContacts, "users")

Return dsContacts
End Function



Sub ddlCompanyName_SelectedIndexChanged(sender As Object, e As
EventArgs)
Dim list As DropDownList = CType(sender, DropDownList)
coName=list.SelectedItem.Text

ddlContactName.DataSource =
GetContactNamesForThisCompanyAndProject ( )
ddlContactName.DataBind ( )
End Sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:DropDownList id="ddlCompanyName" runat="server" Width="204px"
AutoPostBack="True" DataValueField="cname"
OnSelectedIndexChanged="ddlCompanyName_SelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList id="ddlContactName" style="Z-INDEX: 100; LEFT:
13px; POSITION: absolute; TOP: 71px" runat="server" Width="202px"
DataValueField="name"></asp:DropDownList>
</form>
</body>
</html>

Here is my code for the second sample.
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Dim dsCompanyNames as DataSet = New DataSet()
Dim dsContacts as DataSet = New DataSet ()
Dim coName As String
Dim proj = "Big Barn"


Function GetCompaniesForThisProject() As DataSet
dsCompanyNames.Clear()

Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;
Ole DB Services=-4; Data
Source=c:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString As String = "SELECT DISTINCT [users].[cname]
FROM [users] WHERE ([users].[project] = '" & proj & "')"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsCompanyNames, "users")

Return dsCompanyNames
End Function


Function GetContactNamesForThisCompanyAndProject() As DataSet
dsContacts.Clear()

Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;
Ole DB Services=-4; Data
Source=C:\sites\single29\gmeadows73\database\fdmdb.mdb"
Dim queryString = "SELECT [users].[name] FROM [users] WHERE
(([users].[cname] = '" & coName & "') AND ([users].[project] = '" & proj &
"'))"

Dim dataAdapter As New OleDbDataAdapter (querystring,
strConnString)
dataAdapter.Fill(dsContacts, "users")

Return dsContacts
End Function


Sub ddlCompanyName_SelectedIndexChanged(sender As Object, e As
EventArgs)
Dim list As DropDownList = CType(sender, DropDownList)
coName=list.SelectedItem.Text
Dim ddlContactName as DropDownList
ddlContactName.DataSource =
GetContactNamesForThisCompanyAndProject ( )
ddlContactName.DataBind ( )
End Sub

</script>
<html>
<head>
<form runat="server">
<asp:DataGrid id="DataGrid1" runat="server">
<HeaderStyle backcolor="Navy" forecolor="White" font-size="9pt"
font-bold="True" horizontalalign="Center" />
<PagerStyle backcolor="Navy" forecolor="White" font-size="9pt"
font-bold="True" horizontalalign="Right" nextpagetext="Next >"
prevpagetext="< Prev" />
<Columns>
<asp:EditCommandColumn EditText="Edit" UpdateText="Update"
CancelText="Cancel" ButtonType="LinkButton" />
<asp:BoundColumn DataField="ID" HeaderText="Index<br>Number"
ReadOnly="True" />
<asp:TemplateColumn HeaderText="To">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "cname") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="ddlCompanyName" runat="server"
DataValueField="cname" AutoPostBack="True"
OnSelectedIndexChanged="ddlCompanyName_SelectedIndexChanged" />
<asp:DropDownList id="ddlContactName" runat="server"
DataValueField="name" />
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</head>
<body>
</body>
</html>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top