【问题标题】:Fill dropdownlist from stored procedure Error: was out of range of valid values从存储过程中填充下拉列表错误:超出有效值范围
【发布时间】:2017-11-16 20:15:03
【问题描述】:

由于某种原因,我的 DataGrid 中的下拉列表给了我错误:

Specified argument was out of the range of valid values.
Parameter name: index

从行:

 CType(dgAdmins.Controls(0).Controls(dgAdmins.Controls(0).Controls.Count - 1).Controls(0).FindControl("ddlAddGroup"), DropDownList).DataSource = rdr

我以前见过此代码设置工作,所以不确定我缺少什么。我的 templateColumn 是 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>

更新

存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `stp_Select_GroupNames`()
BEGIN
SELECT ID, GroupName from tblg;
END  

当我从存储过程中运行数据集时,我会返回一个计数,因此我知道我也会返回记录。

【问题讨论】:

  • 该下拉列表有数据吗?我的第一个想法是没有数据,-1会导致错误。
  • 另外,你能展示你的存储过程吗?
  • 显示整个网格标记。如果您在违规行上设置断点,那么 dgAdmins.Controls(0).Controls.Count 的值是多少?
  • @mjw 计数为 4
  • 添加存储过程@WEI_DBA

标签: mysql asp.net drop-down-menu controls


【解决方案1】:

当前解决方法:

所以要填充你使用的页脚:

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

要填充单击编辑按钮后显示的下拉列表:

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

其中 sdsGroups 是 HTML 中的 SqlDataSource:

<asp:SqlDataSource ID="sdsGroups"
               ProviderName="MySql.Data.MySqlClient" SelectCommandType="StoredProcedure" SelectCommand="stp_Select_FloortblGroupNames" runat="server" />

网格视图修改

<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>

【讨论】:

  • 您的列索引与原始问题中的索引不接近。很高兴你成功了
  • @mjw 我做了一些调整以尝试找到问题。原始代码实际上只是试图抓住页脚而不是编辑行。
  • 敏感但想通了:)
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2018-12-31
  • 2013-06-12
  • 2020-04-01
相关资源
最近更新 更多