For some reason the dropdownlist within my DataGrid gives me the error:
Specified argument was out of the range of valid values.
Parameter name: index
from line:
CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataSource = rdr
I've seen this code setup work before so not sure what I am missing. My templateColumn is the 2nd column in the DataGrid.
Vb.net
Sub dg_Edit(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
fillGroups()
End sub
Sub fillGroups()
Using con2 As New MySqlConnection
con2.ConnectionString = GetconnString(strFloor, lblDB.Text)
Dim cmd2 As New MySqlCommand()
con2.Open()
cmd2.Connection = con2
cmd2.CommandText = "stp_Select_GroupNames"
cmd2.CommandType = System.Data.CommandType.StoredProcedure
Dim rdr As MySqlDataReader
rdr = cmd2.ExecuteReader
CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataSource = rdr
CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataValueField = "ID"
CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataTextField = "GroupName"
CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataBind()
rdr.Close()
con2.Close()
End Using
End sub
ASP.net
<asp:TemplateColumn HeaderText="'Group'" ItemStyle-Width="225" FooterStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
<FooterTemplate>
<asp:DropDownList ID="ddlAddGroup" runat="server" />
</FooterTemplate>
<ItemTemplate>
<%#Container.DataItem("GroupName")%>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlEditGroup" runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
Update
Stored procedure
CREATE DEFINER=`root`@`%` PROCEDURE `stp_Select_GroupNames`()
BEGIN
SELECT ID, GroupName from tblg;
END
When I run a dataset off the stored procedure I return a count so I know I am getting records returned as well.
Current workaround:
So to fill footer you use:
Sub fillAddGroups()
Dim ds As DataSet = getGroups()
Dim dd As DropDownList = CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList)
dd.DataSource = ds
dd.DataValueField = "ID"
dd.DataTextField = "GroupName"
dd.DataBind()
End Sub
To fill dropdown that shows after clicking the edit button you do:
Sub dg_Edit(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
Dim intempId As Integer
Dim strGroup As String = ""
intempId = CType(e.Item.Cells(0).FindControl("lblEmployeeNumber"), Label).Text
strGroup = CType(e.Item.Cells(0).FindControl("lblGroup"), Label).Text
dgAdmins.EditItemIndex = e.Item.ItemIndex
sdsGroups.ConnectionString = GetconnString(strF, lblDB.Text)
ShowEmpTable(intempId)
fillAddGroups()
End Sub
where sdsGroups is a SqlDataSource in HTML:
<asp:SqlDataSource ID="sdsGroups"
ProviderName="MySql.Data.MySqlClient" SelectCommandType="StoredProcedure" SelectCommand="stp_Select_FloortblGroupNames" runat="server" />
Gridview modifications
<asp:TemplateColumn HeaderText="'Group'" ItemStyle-Width="225" FooterStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
<FooterTemplate>
<asp:DropDownList ID="ddlAddGroup" runat="server" />
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="lblGroup" Text='<%#Container.DataItem("GroupName")%>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlEditGroup" runat="server" DataSourceID="sdsGroups" DataTextField="GroupName" DataValueField="ID"/>
</EditItemTemplate>
</asp:TemplateColumn>
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments