jquery 一旦我们从下拉列表中选择了一个项目,该特定项目必须在行数据绑定时从网格视图中的所有先前下拉列表中删除

qxsslcnc  于 2022-11-22  发布在  jQuery
关注(0)|答案(1)|浏览(84)

我 在 一 个 gridview 列 中 有 下拉 列表 , 一旦 我 从 下拉 列表 中 选择 值 , 它 应该 从 其他 下拉 列表 中 删除 , 即 上 一 个 和 下 一 个 下拉 列表 。 由于 此 值 已经 分配 , 因此 它 不 应该 可 用于 其他 下拉 列表 ( gridview 中 的 上 一 个 和 下 一 个 下拉 列表 ) 。
对于 gridview 中 的 传入 下拉 列表 , 我 使用 下面 的 代码 实现 。

List<int> roles = null;
                int index = e.Row.RowIndex;
                roles = new List<int>();
                for (int i=1;i<=index;i++)
                {
                    GridViewRow prevRow = grdUserProvision.Rows[e.Row.RowIndex - i];
                    ddlSelectedRole = prevRow.FindControl("ddlRole") as DropDownList;
                    roles.Add(Convert.ToInt32( ddlSelectedRole.SelectedValue));

                }
                foreach (var fileterRoles in roles)
                {
                    _roles.RemoveAll(x=>x.RoleID == fileterRoles);
                }
                ControlUtilities.BindListWithSelect(ddlRole, _roles);

中 的 每 一 个
但 如何 删除 项目 从 以前 的 下拉 内 gridview ?

7ajki6be

7ajki6be1#

多可爱的问题啊!
因此,在我们编写代码之前,让我们设计一种方法来解决这个问题。
因此,其逻辑是:
获取网格数据列表(暂时不归档gv)
获取选项的完整下拉数据列表(已删除现有选项)
对于每一行,
下拉列表选项=“当前选择”+可用唐斯。
因此,以上是我们需要的解决方案和逻辑。
因此,让我们假设我们有一个人员列表,每个用户只能从酒店列表中选择一家酒店(我只是碰巧手头有这些数据--但对于任何此类数据,问题都是一样的。(一个选择网格,每行都有一些选择的下拉列表)。
所以,这段代码是有效的:

Dim rstHotels As New DataTable

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadData()
    End If
End Sub

Sub LoadData()

    Dim strSQL As String =
        "SELECT People.ID, FirstName, LastName, City, Hotel_ID, HotelName
        FROM People
        LEFT JOIN tblHotelsL ON tblHotelsL.ID = Hotel_ID
         ORDER BY FirstName"
    Dim rstGrid As DataTable = Myrst(strSQL)

    strSQL =
        "SELECT ID, HotelName FROM tblHotelsA 
        WHERE ID NOT IN 
            (SELECT Hotel_ID FROM People WHERE Hotel_ID IS NOT NULL)"

    rstHotels = Myrst(strSQL)
    GridView1.DataSource = rstGrid
    GridView1.DataBind()

End Sub

以上加载GV和我们的数据。
并且我们需要代码来加载每行的组合框(下拉列表)。
代码如下:

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim gData As DataRowView = e.Row.DataItem
        Dim MyDropDown As DropDownList = e.Row.FindControl("cboHotels")

        ' set combo box choices
        MyDropDown.DataSource = rstHotels
        MyDropDown.DataBind()
        MyDropDown.Items.Insert(0, New ListItem("Please select", "0"))

        ' now add current choice to drop down (if exist)
        With gData
            If Not IsDBNull(.Item("Hotel_ID")) Then
                MyDropDown.Items.Insert(1, New ListItem(.Item("HotelName"), .Item("Hotel_ID")))
                MyDropDown.SelectedIndex = 1
            End If
        End With

    End If

End Sub

所以,我们现在看到/明白了这一点。
请注意,当我为最后4行选择值时,这些选项将从组合框中消失。

并自动保存(自动回发),因此我们保存回数据库代码如下:

Sub SaveData()
    Dim strSQL = "SELECT * FROM People ORDER BY FirstName"
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            Dim rstData As New DataTable
            rstData.Load(cmdSQL.ExecuteReader)
            For Each gRow As GridViewRow In GridView1.Rows
                Dim cbo As DropDownList = gRow.FindControl("cboHotels")
                If cbo.SelectedIndex = 0 Then
                    rstData.Rows(gRow.RowIndex).Item("Hotel_ID") = DBNull.Value
                Else
                    rstData.Rows(gRow.RowIndex).Item("Hotel_ID") = cbo.SelectedItem.Value
                End If
            Next

            Dim da As New SqlDataAdapter(cmdSQL)
            Dim daU As New SqlCommandBuilder(da)
            da.Update(rstData)
        End Using
    End Using

End Sub

相关问题