Public Class FrmChangeHotel Private _defalut As Boolean ''' ''' 客户索引 ''' ''' Public Property VerderIndex As String ''' ''' 客户名称 ''' ''' Public Property VerderName As String ''' ''' 客户索引 ''' ''' Public Property HotelIndex As String ''' ''' 酒店四位数字代号,在TBL_HOTEL_BASIC_INFO 数据表中对应 “PROJECT_NUMBER”字段 ''' ''' Public Property HotelCode As String ''' ''' 酒店名称 ''' ''' Public Property HotelName As String ''' ''' 账号权限 ''' ''' Public Property AccountAuth As AccountAuth ''' ''' 酒店个数 ''' Private _count As Integer = 0 ''' ''' 酒店信息列表 ''' Private g_Hotel_List As New List(Of Struc_HotelList) '当选定酒店组以后,将该酒店组下的酒店信息保存在这个list中 ''' ''' 当前选中的tree view节点信息 ''' Private g_Current_Selected_TreeView_Node As Struc_TreeView_NodeInfo ''' 当前选择的酒店组 Private _selectGroup As HotelGroup 'treeview信息 Public Structure Struc_TreeView_NodeInfo Public Node_Level As Integer Public Node_Idx As Integer Public Node_Text As String Public Node_BackColor As Color End Structure '酒店信息 Public Structure Struc_HotelList Public HotelId As String Public HotelCode As String Public HotelName As String Public HotelGroupsId As String Public HotelGroupsName As String End Structure Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click VerderName = lab_CurrentHotelGroup.Text If String.IsNullOrEmpty(VerderName) Then MsgBox("酒店组无效") GoTo lab_ErrHandle End If If String.IsNullOrEmpty(HotelCode) Then MsgBox("HotelCode无效") GoTo lab_ErrHandle End If If String.IsNullOrEmpty(HotelName) Then MsgBox("酒店名称无效") GoTo lab_ErrHandle End If Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() Return lab_ErrHandle: VerderName = "" HotelCode = "" HotelName = "" Return End Sub Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Close() End Sub Private Sub FrmChangeHotel_Load(sender As Object, e As EventArgs) Handles Me.Load Text = $"{Application.ProductName} {Application.ProductVersion}" If String.IsNullOrEmpty(VerderIndex) OrElse String.IsNullOrEmpty(HotelIndex) Then _defalut = False Else _defalut = True End If '查询所有厂商 tv_GroupList.Nodes.Clear() tv_GroupList.Nodes.Add("All hotels") tv_GroupList.Nodes(0).ForeColor = Color.Blue tv_GroupList.Nodes(0).NodeFont = New Font("幼圆", 12, FontStyle.Bold) tv_GroupList.Nodes(0).ImageIndex = 2 Dim node As TreeNode = tv_GroupList.Nodes(0) Dim tmpReslut As Boolean = False For Each group As HotelGroup In AccountAuth.HotelData '遍历所有酒店组,将酒店组添加到tree view控件中 node.Nodes.Add(group.HotelGroupsName) If _defalut AndAlso group.HotelGroupsId = VerderIndex Then '匹配酒店组默认值 tmpReslut = MatchHotelGroup(group.HotelGroupsName, g_Current_Selected_TreeView_Node) If tmpReslut = True Then lab_CurrentHotelGroup.Text = group.HotelGroupsName '匹配酒店默认值’ tmpReslut = MatchHotelName(HotelName) If tmpReslut = True Then lab_CurrentHotel.Text = HotelName Else lab_CurrentHotel.Text = "" End If Else lab_CurrentHotelGroup.Text = "" End If End If Next tv_GroupList.ExpandAll() _defalut = False End Sub 'Private Sub CboVendor_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboVendor.SelectedIndexChanged ' If CboVendor.SelectedIndex = -1 Then Return ' For Each group As HotelGroup In AccountAuth.HotelData ' If group.HotelGroupsName <> CboVendor.Text Then Continue For ' _selectGroup = group ' CboHotel.Items.Clear() ' For Each hotel As Hotel In group.Hotels ' CboHotel.Items.Add(hotel.HotelName) ' If _defalut AndAlso hotel.HotelId = HotelIndex Then CboHotel.SelectedIndex = CboHotel.Items.Count - 1 ' Next ' If _defalut = False AndAlso CboHotel.Items.Count > 0 Then CboHotel.SelectedIndex = 0 ' 'If CboHotel.Items.Count > 0 Then CboHotel.SelectedIndex = 0 ' VerderIndex = group.HotelGroupsId ' VerderName = group.HotelGroupsName ' Exit For ' Next 'End Sub 'Private Sub CboHotel_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboHotel.SelectedIndexChanged ' If CboHotel.SelectedIndex = -1 Then Return ' If _selectGroup Is Nothing Then Return ' For Each hotel As Hotel In _selectGroup.Hotels ' If hotel.HotelName <> CboHotel.Text Then Continue For ' HotelIndex = hotel.HotelId ' HotelName = hotel.HotelName ' Exit For ' Next 'End Sub Private Sub tv_GroupList_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles tv_GroupList.AfterSelect Dim tmpHotelInfo As Struc_HotelList Dim tmpStrSelectGroupName As String = e.Node.Text Dim node As TreeNode = tv_GroupList.Nodes(0) For Each node In node.Nodes tv_GroupList.Nodes(0).BackColor = Color.White tv_GroupList.Nodes(0).ForeColor = Color.Black node.BackColor = Color.White node.ForeColor = Color.Black Next e.Node.BackColor = Color.CornflowerBlue e.Node.ForeColor = Color.White '清空列表 g_Hotel_List.Clear() For Each group As HotelGroup In AccountAuth.HotelData If tv_GroupList.SelectedNode.Text = "All hotels" Then For Each hotel As Hotel In group.Hotels tmpHotelInfo.HotelId = hotel.HotelId tmpHotelInfo.HotelCode = hotel.Code tmpHotelInfo.HotelName = hotel.HotelName tmpHotelInfo.HotelGroupsId = group.HotelGroupsId tmpHotelInfo.HotelGroupsName = group.HotelGroupsName g_Hotel_List.Add(tmpHotelInfo) Next ' Return '如果选中根节点,则退出 'todo:选中“所有酒店”则将所有的酒店都列在数据表中 Else If group.HotelGroupsName <> tmpStrSelectGroupName Then Continue For '未匹配到节点 _selectGroup = group 'Console.WriteLine($"group.Hotels================={group.Hotels.Count }") lab_CurrentHotelGroup.Text = tmpStrSelectGroupName For Each hotel As Hotel In group.Hotels tmpHotelInfo.HotelId = hotel.HotelId tmpHotelInfo.HotelCode = hotel.Code tmpHotelInfo.HotelName = hotel.HotelName tmpHotelInfo.HotelGroupsId = group.HotelGroupsId tmpHotelInfo.HotelGroupsName = group.HotelGroupsName g_Hotel_List.Add(tmpHotelInfo) Next VerderIndex = group.HotelGroupsId VerderName = group.HotelGroupsName HotelName = "" lab_CurrentHotel.Text = HotelName Exit For End If Next Update_Grid(g_Hotel_List) End Sub #Region "酒店选择 " Private Function MatchHotelName(ByVal HotelHotelName As String) As Boolean For i = 1 To grd_HolteList.Rows - 1 If grd_HolteList.Cell(i, 3).Text = HotelHotelName Then grd_HolteList.Range(i, 1, i, 3).BackColor = Color.LightCyan Return True End If Next HotelName = "" Return False End Function Private Function MatchHotelGroup(ByVal GroupName As String, ByRef SelectedTreeNode As Struc_TreeView_NodeInfo) As Boolean Dim node As TreeNode = tv_GroupList.Nodes(0) Dim tmpHotelInfo As Struc_HotelList '遍历一级子节点 For Each node In node.Nodes '匹配到组名 If node.Text = GroupName Then SelectedTreeNode.Node_Level = 0 SelectedTreeNode.Node_Idx = node.Index SelectedTreeNode.Node_Text = GroupName SelectedTreeNode.Node_BackColor = Color.CornflowerBlue node.BackColor = Color.CornflowerBlue '列出所有酒店 '清空列表 g_Hotel_List.Clear() For Each group As HotelGroup In AccountAuth.HotelData If group.HotelGroupsName <> GroupName Then Continue For '未匹配到节点 _selectGroup = group For Each hotel As Hotel In group.Hotels tmpHotelInfo.HotelCode = hotel.Code tmpHotelInfo.HotelName = hotel.HotelName tmpHotelInfo.HotelId = hotel.HotelId tmpHotelInfo.HotelGroupsId = group.HotelGroupsId tmpHotelInfo.HotelGroupsName = group.HotelGroupsName g_Hotel_List.Add(tmpHotelInfo) Next VerderIndex = group.HotelGroupsId VerderName = group.HotelGroupsName Update_Grid(g_Hotel_List) Exit For Next Return True End If Next Return False End Function Private Sub Update_Grid(HotelInfoList As List(Of Struc_HotelList)) grd_HolteList.AutoRedraw = False With grd_HolteList .Rows = HotelInfoList.Count + 1 .Cols = 4 .DefaultRowHeight = 20 .Column(1).Width = 60 .Column(2).Width = 60 .Column(3).Width = 210 .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.LeftCenter .Font = New Font("Arial", 10, FontStyle.Bold) .AllowUserResizing = FlexCell.ResizeEnum.None .ExtendLastCol = True End With grd_HolteList.Cell(0, 1).Text = "ID" grd_HolteList.Cell(0, 2).Text = "Code" grd_HolteList.Cell(0, 3).Text = "Hotel Name" grd_HolteList.Cell(0, 2).Alignment = FlexCell.AlignmentEnum.CenterCenter For i = 1 To HotelInfoList.Count grd_HolteList.Range(i, 1, i, 3).BackColor = Color.White grd_HolteList.Cell(i, 0).Text = i grd_HolteList.Cell(i, 1).Text = HotelInfoList(i - 1).HotelId grd_HolteList.Cell(i, 2).Text = HotelInfoList(i - 1).HotelCode grd_HolteList.Cell(i, 3).Text = HotelInfoList(i - 1).HotelName grd_HolteList.Cell(i, 2).Tag = HotelInfoList(i - 1).HotelGroupsId grd_HolteList.Cell(i, 3).Tag = HotelInfoList(i - 1).HotelGroupsName Next grd_HolteList.Refresh() grd_HolteList.AutoRedraw = True End Sub Private Sub grd_HolteList_MouseClick(sender As Object, e As MouseEventArgs) Handles grd_HolteList.MouseClick grd_HolteList.AutoRedraw = False grd_HolteList.Range(1, 1, grd_HolteList.Rows - 1, 3).BackColor = Color.White grd_HolteList.Range(grd_HolteList.ActiveCell.Row, 1, grd_HolteList.ActiveCell.Row, 3).BackColor = Color.LightCyan grd_HolteList.Refresh() grd_HolteList.AutoRedraw = True lab_CurrentHotel.Text = grd_HolteList.Cell(grd_HolteList.ActiveCell.Row, 3).Text HotelName = lab_CurrentHotel.Text HotelCode = grd_HolteList.Cell(grd_HolteList.ActiveCell.Row, 2).Text HotelIndex = grd_HolteList.Cell(grd_HolteList.ActiveCell.Row, 1).Text VerderIndex = grd_HolteList.Cell(grd_HolteList.ActiveCell.Row, 2).Tag VerderName = grd_HolteList.Cell(grd_HolteList.ActiveCell.Row, 3).Tag lab_CurrentHotelGroup.Text = VerderName 'tmpHotelInfo.HotelGroupsId = group.HotelGroupsId 'tmpHotelInfo.HotelGroupsName = group.HotelGroupsName 'HotelName = "" 'lab_CurrentHotel.Text = HotelName End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click If IsNothing(grd_HolteList) AndAlso grd_HolteList.Rows < 1 AndAlso String.IsNullOrEmpty(TextBox1.Text.Trim) Then Return Dim tabstr As String For index As Integer = 1 To grd_HolteList.Rows - 1 tabstr = grd_HolteList.Cell(index, 2).Text.Trim & grd_HolteList.Cell(index, 3).Text.Trim If tabstr.Contains(TextBox1.Text.Trim) Then grd_HolteList.Row(index).Position = 1 End If Next End Sub #End Region End Class