Files
ECO2-OD/ArinWarev1/FORM-OD/Frm_2_Build.vb
ykh 744e55f9e9 창호 열관류율 발코니창 추가
소요량 평가서 날짜 변경
2025-06-29 00:00:52 +09:00

1148 lines
48 KiB
VB.net

Public Class Frm_2_Build
Dim T As String = "건축입력"
Dim Dt As DataTable
Dim isCopy As Boolean = False
Dim Init As Boolean = False
Dim SrcDrv As DataRowView
Public Sub New()
' 디자이너에서 이 호출이 필요합니다.
InitializeComponent()
'AddHandler dvProfile1.DataError, Sub(sender, e)
' Console.WriteLine("dv error")
' End Sub
With fxList
.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.None
.KeyActionTab = C1.Win.C1FlexGrid.KeyActionEnum.None
.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Cell
.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always
.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
.ExtendLastCol = False
.AllowSorting = C1.Win.C1FlexGrid.AllowSortingEnum.None
.ShowSortPosition = C1.Win.C1FlexGrid.ShowSortPositionEnum.None
End With
With fxType
.KeyActionEnter = C1.Win.C1FlexGrid.KeyActionEnum.None
.KeyActionTab = C1.Win.C1FlexGrid.KeyActionEnum.None
.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Cell
.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always
.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw
.ExtendLastCol = False
.AllowSorting = C1.Win.C1FlexGrid.AllowSortingEnum.None
.ShowSortPosition = C1.Win.C1FlexGrid.ShowSortPositionEnum.None
End With
AddHandler fxList.KeyPress, AddressOf fgrid_KeyPress
AddHandler fxList.AfterEdit, AddressOf fgrid_AfterEdit
AddHandler fxList.BeforeEdit, AddressOf fgrid_BeginEditS
AddHandler fxList.OwnerDrawCell, AddressOf flexOwnerDrawCell
AddHandler fxType.KeyPress, AddressOf fgrid_KeyPress
AddHandler fxType.AfterEdit, AddressOf fgrid_AfterEdit
AddHandler fxType.BeforeEdit, AddressOf fgrid_BeginEditS
AddHandler fxType.OwnerDrawCell, AddressOf flexOwnerDrawCell
End Sub
Sub Make_형별성능내역_List(colindex As Integer)
' Console.WriteLine("yk2")
Dim sl As New System.Collections.SortedList()
For i As Integer = 1 To DSET1.tbl_yk.Rows.Count
Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i - 1)
sl.Add(dr.code, dr.설명)
Next
fxList.Cols(colindex).DataType = GetType(String)
fxList.Cols(colindex).DataMap = sl
End Sub
Sub Make_존분류_List(colindex As Integer)
' Console.WriteLine("zon")
Dim sl As New System.Collections.SortedList()
For i As Integer = 1 To DSET1.tbl_zone.Rows.Count
Dim dr As DS.tbl_zoneRow = DSET1.tbl_zone.Rows(i - 1)
sl.Add(dr.code, dr.설명)
Next
fxList.Cols(colindex).DataType = GetType(String)
fxList.Cols(colindex).DataMap = sl
End Sub
Sub Make_방위_List(colindex As Integer)
' Console.WriteLine("zon")
Dim sl As New System.Collections.SortedList()
For Each dr As DS.tbl_common_odRow In DSET1.tbl_common_od.Select("gubun='1007'")
sl.Add(dr.name, dr.name)
Next
fxList.Cols(colindex).DataType = GetType(String)
fxList.Cols(colindex).DataMap = sl
End Sub
Sub Make_비주거용도_List(colindex As Integer)
' Console.WriteLine("zon")
Dim sl As New Dictionary(Of String, String)
For Each dr As DS.tbl_profile_odRow In DSET1.tbl_profile_od.Select("code < 5000")
sl.Add(dr.code, dr.설명)
Next
fxType.Cols(colindex).DataType = GetType(String)
fxType.Cols(colindex).DataMap = sl
End Sub
#Region "FlexGRid Events"
Private Sub fgrid_BeginEditS(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs)
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = DirectCast(sender, C1.Win.C1FlexGrid.C1FlexGrid)
'//데이터입력전에 IME를 맞춘다.
Select Case grid.Cols(e.Col).Name.ToLower()
Case "name", "position", "dept", "bigo", "memo", "jname", "설명", "비고", "메모"
grid.ImeMode = Windows.Forms.ImeMode.Hangul
Case Else
grid.ImeMode = Windows.Forms.ImeMode.Alpha
End Select
End Sub
Private Sub fgrid_AfterEdit(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs)
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = DirectCast(sender, C1.Win.C1FlexGrid.C1FlexGrid)
'Dim IDX As Integer = CInt(grid.GetData(e.Row, grid.Cols("IDX").Index))
Dim data As Object = grid.GetData(e.Row, e.Col)
Select Case grid.Cols(e.Col).Name.ToLower()
Case "면적", "세대수", "세대면적"
bsType_CurrentChanged(Nothing, Nothing)
Case Else
If Not MoveCellDown(grid, e.Col) Then MoveCellRight(grid)
Exit Select
End Select
' grid.AutoSizeCols()
End Sub
Private Function FindRowIndex(grid As C1.Win.C1FlexGrid.C1FlexGrid, IDX As Integer, Optional IDXField As String = "IDX") As Integer
For i As Integer = 1 To grid.Rows.Count
Dim oIDX As Integer = CInt(grid.GetData(i, grid.Cols(IDXField).Index))
If IDX = oIDX Then
Return i
End If
Next
Return -1
End Function
Private Sub fgrid_KeyPress(sender As Object, e As KeyPressEventArgs)
'일반선택상태일때 엔터키를 누른다면
If e.KeyChar = Chr(&HD) Then
'엔터는 아래 혹은 우측으로
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = DirectCast(sender, C1.Win.C1FlexGrid.C1FlexGrid)
e.Handled = True
If Not MoveCellDown(grid) Then
MoveCellRight(grid)
End If
ElseIf e.KeyChar = Chr(&H8) Then
'탭은 우측으로
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = DirectCast(sender, C1.Win.C1FlexGrid.C1FlexGrid)
e.Handled = True
MoveCellRight(grid)
End If
End Sub
Private Function MoveCellDown(grid As C1.Win.C1FlexGrid.C1FlexGrid, Optional firstcol As Integer = -1) As [Boolean]
Dim colidx As Integer = grid.CursorCell.c1
'현재
If firstcol > -1 Then
colidx = firstcol
End If
Dim rowidx As Integer = grid.CursorCell.TopRow
Dim newidx As Integer = rowidx + 1
'다음셀을 찾는다.
If newidx < grid.Rows.Count Then
grid.[Select](newidx, colidx)
Return True
Else
'마지막줄이므로 처리하지않ㄴ든다.
Return False
End If
End Function
Private Function MoveCellRight(grid As C1.Win.C1FlexGrid.C1FlexGrid) As [Boolean]
Dim colidx As Integer = grid.CursorCell.c1
'현재
Dim newidx As Integer = colidx + 1
Dim find As [Boolean] = False
'다음셀을 찾는다.
While True
If newidx + 1 <= grid.Cols.Count Then
If Not grid.Cols(newidx).IsVisible OrElse Not grid.Cols(newidx).AllowEditing Then
newidx += 1
Continue While
Else
grid.[Select](grid.CursorCell.TopRow, newidx)
find = True
Exit While
End If
Else
Exit While
End If
End While
Return find
End Function
Sub flexOwnerDrawCell(sender As Object, e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs)
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = sender
If e.Row >= grid.Rows.Fixed AndAlso e.Col = grid.Cols.Fixed - 1 Then
e.Text = (e.Row - grid.Rows.Fixed) + 1
End If
If grid.Cols(e.Col).Name = "수직차양각" OrElse grid.Cols(e.Col).Name = "수평차양각" Then
'//건축부위방식 가 외부창,내부창 일경우에만 수평,수직차양각 칸을 활성화한다. 170517
Dim oVal As Object = grid.GetData(e.Row, "건축부위방식")
Dim sVal As String = ""
If Not oVal Is Nothing Then sVal = oVal.ToString()
If oVal <> "외부창" AndAlso oVal <> "내부창" Then
e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds)
' e.Graphics.DrawRectangle(Pens.Gray, e.Bounds)
End If
End If
End Sub
Private Sub RefreshCellFormat()
'//관리자는 색상을 파란색으로한다.
'If fxList.Styles("chi0") Is Nothing Then
' Dim newstyle As C1.Win.C1FlexGrid.CellStyle = fxList.Styles.Add("chi0")
' newstyle.ForeColor = Color.Blue
'End If
'If fxList.Styles("chi1") Is Nothing Then
' Dim newstyle As C1.Win.C1FlexGrid.CellStyle = fxList.Styles.Add("chi1")
' newstyle.ForeColor = Color.Black
'End If
'For i As Integer = 1 To Me.fxList.Rows.Count - 1
' Dim obj_admin As Object = Me.fxList.GetData(i, Me.fxList.Cols("admin").Index)
' Dim admin As Boolean = False
' If Not obj_admin Is Nothing Then admin = CBool(obj_admin)
' If admin Then
' fxList.Rows(i).Style = fxList.Styles("chi0")
' Else
' fxList.Rows(i).Style = fxList.Styles("chi1")
' End If
'Next
End Sub
#End Region
Private Sub Frm_2_Build_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Me.fxList.FinishEditing()
Me.bs.EndEdit()
Me.bsType.EndEdit()
Me.bs_desc.EndEdit()
'//가운데분할자정보를 저장한다.
Pub.Setting.Data("Mach", "Div" + Pub.Program.ToString(), "") = Me.SplitContainer1.SplitterDistance.ToString()
End Sub
Private Sub Frm_2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.bs.DataSource = DSET1
Me.bs_desc.DataSource = DSET1
Me.bs_열관류.DataSource = DSET1
Me.bsType.DataSource = DSET1
Me.bs방위.DataSource = DSET1
Dt = DSET1.tbl_myoun
AddHandler DSET1.tbl_myoun.TableNewRow, AddressOf AddNewDataRow_new
AddHandler DSET1.tbl_myoun.ColumnChanged, AddressOf AddNewDataRow_Zone_Changed
AddHandler DSET1.tbl_type.TableNewRow, AddressOf AddNewDataRow_type
Binding_Zone()
'//모든컨트롤의 cTrl_enter 를 추가합니다
'BindProperty(CType(Me.SplitContainer1.Panel2.Controls, Control.ControlCollection))
Me.Init = True
Me.Show()
Application.DoEvents()
'Try
' Me.bs_zone.Position = CEnergy.ARINCLASS.Read_LastPos_Frm(Me.Name & "1")
'Catch ex As Exception
' Me.bs_zone.MoveFirst()
'End Try
Try
Me.bs.Position = CEnergy.ARINCLASS.Read_LastPos_Frm(Me)
Catch ex As Exception
Me.bs.MoveFirst()
End Try
Bs_CurrentChanged(sender, e)
Validate_Control()
'//주거,비주거형태로 열 정렬
If Program = EProgram.총량평가 Then
fxType.Cols("세대타입").Visible = False
fxType.Cols("세대면적").Visible = False
fxType.Cols("세대수").Visible = False
Label35.Text = "연면적"
Label17.Text = "층 별 개 요"
Else
fxType.Cols("").Visible = False
fxType.Cols("면적").Visible = False
fxType.Cols("시설용도").Visible = False
Label35.Text = "총전용면적"
Label17.Text = "면적및세대합"
End If
'//제목줄 크기변경
fxList.Rows()(0).HeightDisplay *= 2
fxList.Rows()(0).StyleDisplay.WordWrap = True
fxType.Rows()(0).HeightDisplay *= 2
fxType.Rows()(0).StyleDisplay.WordWrap = True
'//열너비
ReadfGridColWidth(Me.Name, fxList)
ReadfGridColWidth(Me.Name, fxType)
End Sub
Private Sub AddNewDataRow_new(ByVal sender As Object, ByVal e As System.Data.DataTableNewRowEventArgs)
'//존분류값가져오기(신규추가시)
e.Row.Item("code") = GetMaxCode(DSET1.tbl_myoun)
'e.Row.Item("열관류율2") = Me.cmb_gubun.Text '//선택된 그것의 값이 들어가도록..필드명만찾아서 입력하세요.
e.Row.Item("설명") = bs.Count + 1
'Try
' If Me.cmb_gubun.SelectedIndex = -1 OrElse Me.cmb_gubun.Text = "(없음)" Then
' e.Row.Item("설명") = bs.Count + 1
' Else
' e.Row.Item("설명") = Me.cmb_gubun.Text
' End If
'Catch ex As Exception
' e.Row.Item("설명") = "ㅣ"
'End Try
End Sub
Private Sub AddNewDataRow_type(ByVal sender As Object, ByVal e As System.Data.DataTableNewRowEventArgs)
'//존분류값가져오기(신규추가시)
e.Row.Item("code") = GetMaxCode(DSET1.tbl_type)
End Sub
Private Sub Calc_전체면적()
Dim total As Double = 0
Dim total2 As Integer = 0 '//세대수합
For Each dr As DS.tbl_typeRow In DSET1.tbl_type.Rows
If dr.RowState = DataRowState.Deleted OrElse dr.RowState = DataRowState.Detached Then Continue For
If Pub.Program = EProgram.총량평가 Then
total += dr.면적
Else
total += dr.세대면적 * dr.세대수
total2 += dr.세대수
End If
Next
If Pub.Program = EProgram.총량평가 Then
tb_전체바닥면적.Text = total.ToString()
Else
tb_바닥면적.Text = total.ToString()
tb_전체바닥면적.Text = total2.ToString()
End If
End Sub
#Region "Control_Enter"
Private Sub BindProperty(ByVal Ctl As Control.ControlCollection)
For Each C As Control In Ctl
If C.Controls.Count > 1 Then
BindProperty(C.Controls)
Else
If C.GetType.ToString.ToUpper.IndexOf("MYTB") <> -1 Then
AddHandler CType(C, MyTb).KeyDown, AddressOf TextBOx_KeyDown
ElseIf C.GetType.ToString.ToUpper.IndexOf("MYCMB") <> -1 Then
AddHandler CType(C, MyCmb).KeyDown, AddressOf Cmd_KeyDown
AddHandler CType(C, MyCmb).MouseHover, AddressOf ComboBox_MouseHover
End If
End If
Next
End Sub
Private Sub TextBOx_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter AndAlso e.Control Then
Try
Dim Field As String = (CType(sender, MyTb).DataBindings.Item("text").BindingMemberInfo.BindingField)
For Each Dr As DataRow In Dt.Select(Me.bs.Filter, "")
If Dr.RowState = DataRowState.Deleted OrElse Dr.RowState = DataRowState.Detached Then Continue For
Dr(Field) = CType(sender, MyTb).Text
Next
Work_msg_timer("모든값이 변경되었습니다", 25)
Catch ex As Exception
End Try
End If
End Sub
Private Sub Cmd_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter AndAlso e.Control Then
Try
Dim Field As String = (CType(sender, MyCmb).DataBindings.Item("selectedvalue").BindingMemberInfo.BindingField)
For Each Dr As DataRow In Dt.Select(Me.bs.Filter, "")
If Dr.RowState = DataRowState.Deleted OrElse Dr.RowState = DataRowState.Detached Then Continue For
Dr(Field) = CType(sender, MyCmb).SelectedValue
Next
Work_msg_timer("모든값이 변경되었습니다", 25)
Catch ex As Exception
End Try
End If
End Sub
Private Sub ComboBox_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs)
If CType(sender, ComboBox).SelectedIndex = -1 Then Return
Me.ToolTip1.SetToolTip(CType(sender, ComboBox), CType(sender, ComboBox).DataBindings("selectedvalue").BindingMemberInfo.BindingMember & vbCrLf & CType(sender, ComboBox).SelectedValue.ToString)
End Sub
#End Region
#Region "ComboxBox Binding"
Dim 변경안함_바닥면적 As Boolean = False
Private Sub AddNewDataRow_Zone_Changed(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
'//값이바뀐다면 조명의실지수값을 재계산한다.
'MsgBox(e.Column.ToString)
Select Case e.Column.Caption.Trim
Case "바닥면적"
If 변경안함_바닥면적 Then Return
'//존분류값이 바뀌었을경우 해당 데이터가 기록된 다른줄을 찾아서 그 값을 설정해준다.
Dim 존분류 As String = e.Row("존분류").ToString
Dim 코드 As String = e.Row("code").ToString
'//순환참조에러방지
변경안함_바닥면적 = True
For Each dr As DS.tbl_myounRow In DSET1.tbl_myoun.Select("code <> '" + 코드 + "' and 존분류='" + 존분류 + "'")
If dr.RowState = DataRowState.Deleted OrElse dr.RowState = DataRowState.Detached Then Continue For
dr.바닥면적 = e.ProposedValue.ToString
Next
For Each dr As DS.tbl_myounRow In DSET1.tbl_myoun.Select("code <> '0' and (존분류='0' or 존분류='')")
If dr.RowState = DataRowState.Deleted OrElse dr.RowState = DataRowState.Detached Then Continue For
dr.바닥면적 = "0"
Next
변경안함_바닥면적 = False
Calc_전체면적()
Case "건축부위방식"
'If e.ProposedValue.ToString = "내벽" OrElse e.ProposedValue.ToString = "간벽" OrElse e.ProposedValue.ToString = "내부창" Then
' e.Row("방위") = "일사없음"
'End If
'Me.bs.EndEdit()
Case "열관류율2" '//변경시 작업
Dim ykcode As String = e.ProposedValue.ToString
' MsgBox("ykcode=" + ykcode, MsgBoxStyle.Information, "형별")
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & ykcode & "'")
If dr.GetUpperBound(0) <> -1 Then
e.Row("열관류율") = dr(0).열관류율
'e.Row("투과율") = dr(0).일사에너지투과율
If dr(0).면형태 = "0007" OrElse dr(0).면형태 = "0008" Then
e.Row("투과율") = dr(0).투과율
Else
e.Row("투과율") = dr(0).일사에너지투과율
End If
Select Case dr(0).면형태
Case "외벽(직접)", "0"
e.Row("면형태") = "외벽(직접)"
e.Row("건축부위방식") = "외벽"
Case "지붕(직접)", "0001"
e.Row("면형태") = "지붕(직접)"
e.Row("건축부위방식") = "외벽"
e.Row("방위") = "수평"
Case "바닥(직접)", "0002"
e.Row("면형태") = "바닥(직접)"
e.Row("건축부위방식") = "외벽"
e.Row("방위") = "일사없음"
Case "외벽(간접)", "0003"
e.Row("면형태") = "외벽(간접)"
e.Row("건축부위방식") = "내벽"
e.Row("방위") = "(없음)"
Case "지붕(간접)", "0004"
e.Row("면형태") = "지붕(간접)"
e.Row("건축부위방식") = "내벽"
e.Row("방위") = "일사없음"
Case "바닥(간접)", "0005"
e.Row("면형태") = "바닥(간접)"
e.Row("건축부위방식") = "내벽"
e.Row("방위") = "일사없음"
Case "간벽", "0006"
e.Row("면형태") = "간벽"
e.Row("건축부위방식") = "간벽"
e.Row("방위") = "(없음)"
Case "창(직접)", "창(간접)", "문(직접)", "문(간접)", "세대현관문(직접)", "세대현관문(간접)", "0007", "0008", "0010", "0011", "0012", "0013"
If dr(0).면형태 = "0007" Then
e.Row("면형태") = "창(직접)"
e.Row("건축부위방식") = "외부창"
ElseIf dr(0).면형태 = "0008" Then
e.Row("면형태") = "창(간접)"
e.Row("건축부위방식") = "내부창"
'e.Row("방위") = "(없음)"
ElseIf dr(0).면형태 = "0010" Then
e.Row("면형태") = "문(직접)"
e.Row("건축부위방식") = "외부창"
ElseIf dr(0).면형태 = "0011" Then
e.Row("면형태") = "문(간접)"
e.Row("건축부위방식") = "내부창"
e.Row("방위") = "(없음)"
ElseIf dr(0).면형태 = "0012" Then
e.Row("면형태") = "세대현관문(직접)"
e.Row("건축부위방식") = "외부창"
ElseIf dr(0).면형태 = "0013" Then
e.Row("면형태") = "세대현관문(간접)"
e.Row("건축부위방식") = "내부창"
e.Row("방위") = "(없음)"
End If
Case "지중벽", "0009"
e.Row("면형태") = "지중벽"
e.Row("건축부위방식") = "내벽"
e.Row("방위") = "(없음)"
Case Else
e.Row("면형태") = "--"
MsgBox("모르는값 " & dr(0).면형태 & "/")
End Select
End If
Me.bs.EndEdit()
'Case "열관류율"
' Dim ykcode As String = e.ProposedValue.ToString
' MsgBox("ykcode=" + ykcode, MsgBoxStyle.Information, "열관류율")
' Dim dr() As DS.tbl_ykRow = DSET.tbl_yk.Select("code='" & ykcode & "'")
' If dr.GetUpperBound(0) <> -1 Then
' e.Row("투과율") = dr(0).일사에너지투과율
' End If
' Me.bs.EndEdit()
Case Else
'MsgBox(e.Column.Caption.Trim)
End Select
End Sub
Private Sub MdiMain_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
CEnergy.ARINCLASS.SaveLoad_FrmSetting(Me, Me.bs.Position, True)
'CEnergy.ARINCLASS.Save_LastPos_Frm(Me.Name & "1", Me.bs_zone.Position)
End Sub
Private Function GetMaxCode(ByVal dt As DataTable) As String
Try
Dim Dr As DataRow = dt.Select("", "code desc")(0)
Return Format(CInt(Dr("code")) + 1, "0000")
Catch ex As Exception
Return "0001"
End Try
End Function
Private Sub Binding_Zone()
' Dim filter As String = "gubun ='1007'"
'Dim bs방위 As New BindingSource(DSET1, "tbl_common_od") With {.Filter = filter, .Sort = "code"}
'Dim cmd방위 As New ComboBox With {.DataSource = bs방위, .DisplayMember = "name", .ValueMember = "name"}
'fxList.Cols("방위").Editor = cmd방위
Make_형별성능내역_List(fxList.Cols("열관류율2").Index)
Make_존분류_List(fxList.Cols("존분류").Index)
Make_방위_List(fxList.Cols("방위").Index)
Make_비주거용도_List(fxType.Cols("시설용도").Index)
'Dim bs형별성능내역 As New BindingSource(DSET1, "tbl_yk") With {.Filter = filter, .Sort = ""}
'Dim cmd형별성능내역 As New ComboBox With {.DataSource = bs형별성능내역, .DisplayMember = "설명", .ValueMember = "code"}
'fxList.Cols("열관류율2").Editor = cmd형별성능내역
'filter = ""
'Dim bs존분류 As New BindingSource(DSET1, "tbl_zone") With {.Filter = filter, .Sort = ""}
'Dim cmd존분류 As New ComboBox With {.DataSource = bs존분류, .DisplayMember = "설명", .ValueMember = "code"}
'fxList.Cols("존분류").Editor = cmd존분류
End Sub
#End Region
''' <summary>
''' 콤보박스등에의한 개체의 활성화여부를 확인
''' </summary>
''' <remarks></remarks>
Private Sub Validate_Control()
If Not Init Then Return
If Me.isCopy Then Return
Display_info()
End Sub
Private Sub Display_info()
Dim WallArea As Decimal, WindowArea As Decimal, WallUvalue As Decimal, WindowUvalue As Decimal
WallArea = 0
WindowArea = 0
WallUvalue = 0
WindowUvalue = 0
Try
For Each Dr입력면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='외벽' or 건축부위방식 ='외부창' or 건축부위방식 ='내벽' or 건축부위방식 ='내부창'")
If Dr입력면.RowState = DataRowState.Deleted OrElse Dr입력면.RowState = DataRowState.Detached Then Continue For
Dim Dr열관류율 As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2.ToString & "'")(0)
Dr입력면("열관류율") = Dr열관류율.열관류율
If Dr열관류율.면형태 = "0007" OrElse Dr열관류율.면형태 = "0008" Then
Dr입력면("투과율") = Dr열관류율.투과율
Else
Dr입력면("투과율") = Dr열관류율.일사에너지투과율
End If
Select Case Dr열관류율.면형태
Case "외벽(직접)", "0"
Dr입력면("면형태") = "외벽(직접)"
Dr입력면("건축부위방식") = "외벽"
Case "지붕(직접)", "0001"
Dr입력면("면형태") = "지붕(직접)"
Dr입력면("건축부위방식") = "외벽"
Dr입력면("방위") = "수평"
Case "바닥(직접)", "0002"
Dr입력면("면형태") = "바닥(직접)"
Dr입력면("건축부위방식") = "외벽"
Dr입력면("방위") = "일사없음"
Case "외벽(간접)", "0003"
Dr입력면("면형태") = "외벽(간접)"
Dr입력면("건축부위방식") = "내벽"
Dr입력면("방위") = "(없음)"
Case "지붕(간접)", "0004"
Dr입력면("면형태") = "지붕(간접)"
Dr입력면("건축부위방식") = "내벽"
Dr입력면("방위") = "일사없음"
Case "바닥(간접)", "0005"
Dr입력면("면형태") = "바닥(간접)"
Dr입력면("건축부위방식") = "내벽"
Dr입력면("방위") = "일사없음"
Case "간벽", "0006"
Dr입력면("면형태") = "간벽"
Dr입력면("건축부위방식") = "간벽"
Dr입력면("방위") = "(없음)"
Case "창(직접)", "창(간접)", "문(직접)", "문(간접)", "세대현관문(직접)", "세대현관문(간접)", "0007", "0008", "0010", "0011", "0012", "0013"
If Dr열관류율.면형태 = "0007" Then
Dr입력면("면형태") = "창(직접)"
Dr입력면("건축부위방식") = "외부창"
ElseIf Dr열관류율.면형태 = "0008" Then
Dr입력면("면형태") = "창(간접)"
Dr입력면("건축부위방식") = "내부창"
'e.Row("방위") = "(없음)"
ElseIf Dr열관류율.면형태 = "0010" Then
Dr입력면("면형태") = "문(직접)"
Dr입력면("건축부위방식") = "외부창"
ElseIf Dr열관류율.면형태 = "0011" Then
Dr입력면("면형태") = "문(간접)"
Dr입력면("건축부위방식") = "내부창"
Dr입력면("방위") = "(없음)"
ElseIf Dr열관류율.면형태 = "0012" Then
Dr입력면("면형태") = "세대현관문(직접)"
Dr입력면("건축부위방식") = "외부창"
ElseIf Dr열관류율.면형태 = "0013" Then
Dr입력면("면형태") = "세대현관문(간접)"
Dr입력면("건축부위방식") = "내부창"
Dr입력면("방위") = "(없음)"
End If
Case "지중벽", "0009"
Dr입력면("면형태") = "지중벽"
Dr입력면("건축부위방식") = "내벽"
Dr입력면("방위") = "(없음)"
Case Else
Dr입력면("면형태") = "--"
MsgBox("모르는값 " & Dr열관류율.면형태 & "/")
End Select
Me.bs.EndEdit()
Select Case Dr입력면.건축부위방식
Case "외벽"
If Dr열관류율.면형태 = "외벽(직접)" OrElse Dr열관류율.면형태 = "0" Then
'If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
WallArea = WallArea + TOSG(T, Dr입력면.건축부위면적)
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
WallUvalue = WallUvalue + TOSG(T, dr(0).열관류율) * TOSG(T, Dr입력면.건축부위면적)
'End If
End If
Case "외부창"
If Dr열관류율.면형태 = "창(직접)" OrElse Dr열관류율.면형태 = "문(직접)" OrElse Dr열관류율.면형태 = "세대현관문(직접)" OrElse _
Dr열관류율.면형태 = "0007" OrElse Dr열관류율.면형태 = "0010" OrElse Dr열관류율.면형태 = "0012" Then
'If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
WindowArea = WindowArea + TOSG(T, Dr입력면.건축부위면적)
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
WindowUvalue = WindowUvalue + TOSG(T, dr(0).열관류율) * TOSG(T, Dr입력면.건축부위면적)
'End If
End If
Case "내부창"
If Dr열관류율.면형태 = "창(간접)" OrElse Dr열관류율.면형태 = "문(간접)" OrElse Dr열관류율.면형태 = "세대현관문(간접)" OrElse _
Dr열관류율.면형태 = "0008" OrElse Dr열관류율.면형태 = "0011" OrElse Dr열관류율.면형태 = "0013" Then
WindowArea = WindowArea + TOSG(T, Dr입력면.건축부위면적)
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
WindowUvalue = WindowUvalue + TOSG(T, dr(0).열관류율) * TOSG(T, Dr입력면.건축부위면적) * 0.8
End If
Case "내벽"
If Dr열관류율.면형태 = "외벽(간접)" OrElse Dr열관류율.면형태 = "0003" Then
'Dim Dr열관류율 As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2.ToString & "'")(0)
'If Dr열관류율.면형태 <> "지중벽" AndAlso Dr열관류율.면형태 <> "0009" Then
'If Dr입력면.방위 <> "일사없음" Then
WallArea = WallArea + TOSG(T, Dr입력면.건축부위면적)
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
WallUvalue = WallUvalue + TOSG(T, dr(0).열관류율) * TOSG(T, Dr입력면.건축부위면적) * 0.7
'End If
'End If
End If
End Select
Next
'For Each Dr입력면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("건축부위방식='외부창'")
' WindowArea = WindowArea + TOSG(T,Dr입력면.건축부위면적)
'Next
Catch ex As Exception
End Try
Try
tb_창면적비.Text = Math.Round(WindowArea / (WallArea + WindowArea) * 100, 2).ToString
Catch ex As Exception
tb_창면적비.Text = ""
End Try
Try
tb_평균열관류율.Text = Math.Round((WallUvalue + WindowUvalue) / (WallArea + WindowArea), 3).ToString
Catch ex As Exception
tb_평균열관류율.Text = ""
End Try
End Sub
Private Sub Cmb_블라인드설치유무_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Validate_Control()
End Sub
Private Sub Cmb_건축부위방식_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.V And e.Control Then
Me.isCopy = True
Dim StartPos As Integer = Me.bs.Position '//현재 바인딩셋의 위치정보를 확인
Dim CurPos As Integer = StartPos
e.Handled = True
e.SuppressKeyPress = False
'//클립보드붙여넣기
Dim CB() As String = My.Computer.Clipboard.GetText.Split(CChar(vbCrLf))
If CB.GetUpperBound(0) <> 18 Then
MsgBox("붙여넣기가 호환되는 데이터가 아닙니다.", MsgBoxStyle.Information, "확인")
Return
End If
'//면개의 입력면이 존재하는지확인한다.
For ii As Integer = 0 To CType(CB(0).Split(CChar(vbTab)), String()).GetUpperBound(0)
If Me.bs.Count = 0 OrElse ii > 0 Then
AddNew()
End If
Dim Cnt As Short = 0
For i As Integer = 0 To CB.GetUpperBound(0)
Select Case i
Case 0 '//설명
CType(Me.bs.Current, DataRowView)("설명") = CB(i).Split(CChar(vbTab))(ii).Trim
End Select
Next
Next
Me.bs.EndEdit()
Me.isCopy = False
Me.Validate_Control()
End If
End Sub
Private Sub Bs_CurrentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bs.CurrentChanged
If Not Init Then Return
Me.bs.EndEdit()
Dim drv As DataRowView = Me.bs.Current
If drv Is Nothing Then Return
End Sub
Private Sub Bt_Del_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Right Then
If MsgBox("전체삭제를 하시겠습니까?", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "확인") = MsgBoxResult.Ok Then
Dim dR() As DataRow = DSET1.tbl_myoun.Select(Me.bs.Filter, "")
For i As Integer = dR.GetUpperBound(0) To 0 Step -1
dR(i).Delete()
Next
DSET1.tbl_myoun.AcceptChanges()
End If
End If
End Sub
Private Sub Dv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles fxList.MouseUp
If e.Button = Windows.Forms.MouseButtons.Middle Then
Frm_Filter.ColumTitle = getColCaption(Me.Dt)
Frm_Filter.ColumList = getColName(Me.Dt)
Frm_Filter.Colorlist = "존분류,대차대조존"
Frm_Filter.Numfield = "건축부위면적,열관류율,투과율" '//20100618 Color 리스트처럼 , 구분해서 필드들을 모두 넣으세요.(=, >= 등을 사용하기 위해서는 해당 항목을 추가 요망)
If Frm_Filter.ShowDialog <> Windows.Forms.DialogResult.OK Then Return '//창떳을떄 확인아ㅣ고 취소눌르면 다음을 수행하지않는다는거에요.
Dim Filter As String = Frm_Filter.tb_filter.Text '//값은 아까 그 텍박에 잇구요.
Try
Me.bs.Filter = Filter
'//바꾸기값이 있으면 변경 20100618
If Frm_Filter.cmb_fieldc.SelectedIndex >= 0 AndAlso Frm_Filter.cmb_fieldc.Text.ToLower <> "code" AndAlso
Frm_Filter.tb_valuec.Text <> "" Then
Dim Drow() As DataRow = Me.Dt.Select(Filter)
Dim i As Integer = 0
For Each Dr As DataRow In Drow
If Dr.RowState = DataRowState.Deleted OrElse Dr.RowState = DataRowState.Detached Then Continue For
Dr(Frm_Filter.cmb_fieldc.Text) = Frm_Filter.tb_valuec.Text
i += 1
Next
MsgBox("'" & i & "'개 바꾸기 완료", MsgBoxStyle.Information, "확인")
End If
Catch ex As Exception
Me.bs.Filter = ""
End Try
End If
End Sub
Private Sub Dv_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
'//여기보시면 alt+d 누르면 한줄을 경고없이(falsE)삭제하도록 햇어요.. 사실원래 밋alt +d 인데.. ㅎㅎ 잘못해서 ctrl 됫다는
Select Case e.KeyCode
Case Keys.D
If e.Alt Then
Dbbase.DelCrow(Me.bs, False)
End If
Case Keys.C
If e.Control Then
Me.SrcDrv = Me.bs.Current
If Me.SrcDrv Is Nothing Then
MsgBox("저장할 ROW가 없습니다", MsgBoxStyle.Information, "확인")
Return
End If
' My.Computer.Clipboard.SetData("ZDATA", Drv)
End If
Case Keys.V
If e.Control Then
If Me.SrcDrv Is Nothing Then Return
AddNew()
Dim NewDrv As DataRowView = Me.bs.Current
For Each C As DataColumn In Me.Dt.Columns
If C.ColumnName.ToUpper = "CODE" Then
ElseIf C.ColumnName.ToUpper = "설명" Then
NewDrv(C.ColumnName) = SrcDrv(C.ColumnName) & "#1"
Else
NewDrv(C.ColumnName) = SrcDrv(C.ColumnName)
End If
Next
Me.bs.EndEdit()
bs.MoveLast()
End If
End Select
End Sub
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
Dim f As New Frm_V20091231_YK
f.ShowDialog()
'//형별성능내역목록 업데이트 170517
Make_형별성능내역_List(fxList.Cols("열관류율2").Index)
Display_info()
End Sub
Private Sub MyTb1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_층고.TextChanged
'Me.bs.EndEdit() '//이부분이 박에서 수행되면 사라짐
'Me.bs_desc.EndEdit()
End Sub
Private Sub Frm_2_Build_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
Me.bs.EndEdit() '//이부분이 박에서 수행되면 사라짐
Me.bs_desc.EndEdit()
'Me.bs_zone.EndEdit()
End Sub
Private Sub Bs_CurrentItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles bs.CurrentItemChanged
Try
Display_info()
Me.bs.EndEdit()
Catch ex As Exception
End Try
End Sub
Private Sub Bs_열관류_CurrentItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles bs_열관류.CurrentItemChanged
Display_info()
bs_열관류.EndEdit()
End Sub
Private Sub Bs_desc_CurrentItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles bs_desc.CurrentItemChanged
Display_info()
Me.bs_desc.EndEdit()
End Sub
Private Sub Tb_바닥면적_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles tb_바닥면적.KeyUp
Dim drv As DataRowView = Me.bs.Current
If drv Is Nothing Then Return
If Pub.Program = EProgram.총량평가 Then
drv("바닥면적") = tb_바닥면적.Text
Else
drv("세대면적") = tb_바닥면적.Text
End If
End Sub
Public Overrides Function AcceptChanged() As Boolean
fxType.FinishEditing()
bsType.EndEdit()
bs.EndEdit()
DSET1.tbl_myoun.AcceptChanges()
Return MyBase.AcceptChanged()
End Function
Private Sub C1StatusBar2_Click(sender As Object, e As EventArgs) Handles C1StatusBar2.Click
AcceptChanged()
End Sub
Private Sub C1StatusBar3_Click(sender As Object, e As EventArgs)
End Sub
Sub AddNew()
If Not EndEdit(Me.bs) Then Return
'//Me.cmb_gubun.SelectedIndex = 0
Me.bs.AddNew()
INitRow(Me.Controls)
'//추가한후에
'Me.cmb_열관류율.Text = Me.cmb_gubun.Text
'//이게 콤보넣을떄인데요. 면의형태의 값을.. 어디다가 넣으시게요?
Dim Dr1() As DS.tbl_ykRow = DSET1.tbl_yk.Select("설명=''")
If Dr1.GetUpperBound(0) = 0 Then '//해당데이터가 찾아졋을경우에
Dim dr2() As DS.tbl_common_odRow = DSET1.tbl_common_od.Select("gubun='1088' and code='" & Dr1(0).면형태 & "'")
Dim 면형태 As String = dr2(0).name
'Select Case 면형태
' Case "외벽(벽체)"
' Me.cmb_건축부위방식.Text = "외벽"
' Case "외벽(지붕)"
' Me.cmb_건축부위방식.Text = "외벽"
' Me.cmb_방위.Text = "수평"
' Case "외벽(바닥)"
' Me.cmb_건축부위방식.Text = "외벽"
' Me.cmb_방위.Text = "일사없음"
' Case "내벽(벽체)"
' Me.cmb_건축부위방식.Text = "내벽"
' Me.cmb_방위.Text = "일사없음"
' Case "내벽(지붕)"
' Me.cmb_건축부위방식.Text = "내벽"
' Me.cmb_방위.Text = "일사없음"
' Case "내벽(바닥)"
' Me.cmb_건축부위방식.Text = "내벽"
' Me.cmb_방위.Text = "일사없음"
' Case "간벽"
' Me.cmb_건축부위방식.Text = "간벽"
' Me.cmb_방위.Text = "일사없음"
' Case "외부창", "내부창"
' If 면형태 = "외부창" Then
' Me.cmb_건축부위방식.Text = "외부창"
' Else
' Me.cmb_건축부위방식.Text = "내부창"
' Me.cmb_방위.Text = "일사없음"
' End If
' Dim Dr As DS.tbl_ykRow = DSET.tbl_yk.Select("code='" & Me.cmb_열관류율.SelectedValue & "'")(0)
' 'Me.tb_04.Text = Dr("일사에너지투과율").ToString
' Case Else
' MsgBox("모르는값 " & Dr1(0).면형태 & "/" & 면형태)
'End Select
Else
' MsgBox("못찻음")
End If
End Sub
Private Sub RibbonButton2_Click(sender As Object, e As EventArgs)
End Sub
Private Sub RibbonButton3_Click(sender As Object, e As EventArgs)
End Sub
Private Sub RibbonButton4_Click(sender As Object, e As EventArgs)
End Sub
Private Sub RibbonButton5_Click(sender As Object, e As EventArgs)
End Sub
Private Sub 열너비자동조정ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 열너비자동조정ToolStripMenuItem.Click
Dim MenuItem As ToolStripMenuItem = sender
If Not MenuItem Is Nothing Then
Dim cMenu As ContextMenuStrip = MenuItem.Owner
If Not cMenu Is Nothing Then
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = cMenu.SourceControl
grid.AutoSizeCols()
End If
End If
End Sub
Private Sub 열너비저장ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 열너비저장ToolStripMenuItem.Click
Dim MenuItem As ToolStripMenuItem = sender
If Not MenuItem Is Nothing Then
Dim cMenu As ContextMenuStrip = MenuItem.Owner
If Not cMenu Is Nothing Then
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = cMenu.SourceControl
SavefGridColWidth(Me.Name, grid)
End If
End If
End Sub
Private Sub 열너비초기화ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 열너비초기화ToolStripMenuItem.Click
Dim MenuItem As ToolStripMenuItem = sender
If Not MenuItem Is Nothing Then
Dim cMenu As ContextMenuStrip = MenuItem.Owner
If Not cMenu Is Nothing Then
Dim grid As C1.Win.C1FlexGrid.C1FlexGrid = cMenu.SourceControl
'//모든데이터의 열너비를 초기화한다.
ClearfGridColWidth(grid)
End If
End If
End Sub
Private Sub RibbonButton1_Click(sender As Object, e As EventArgs) Handles RibbonButton1.Click
AcceptChanged()
End Sub
Private Sub RibbonButton7_Click(sender As System.Object, e As System.EventArgs) Handles RibbonButton7.Click
AddNew()
End Sub
Private Sub RibbonButton8_Click(sender As System.Object, e As System.EventArgs) Handles RibbonButton8.Click
Dbbase.DelCrow(Me.bs, True)
End Sub
Private Sub RibbonButton2_Click_1(sender As System.Object, e As System.EventArgs) Handles RibbonButton2.Click
bsType.AddNew()
End Sub
Private Sub RibbonButton6_Click(sender As System.Object, e As System.EventArgs) Handles RibbonButton6.Click
' bsType.RemoveCurrent()
Dbbase.DelCrow(Me.bsType, True)
End Sub
Private Sub Frm_2_Build_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
'//가운데분할자를 불러온다.
Dim spliterdist As String = Pub.Setting.Data("Mach", "Div" + Pub.Program.ToString(), "")
If IsNumeric(spliterdist) Then Me.SplitContainer1.SplitterDistance = Integer.Parse(spliterdist)
End Sub
Private Sub bsType_CurrentChanged(sender As Object, e As EventArgs) Handles bsType.CurrentChanged
Dim drv As DataRowView = Me.bsType.Current
If drv Is Nothing Then Return
'Dim dr As DS.tbl_typeRow = drv.Row
Dim yongdo As String = String.Empty
Dim area As Double = 0
If Not drv("시설용도") Is DBNull.Value Then
yongdo = drv("시설용도").ToString
For Each dr As DS.tbl_typeRow In DSET1.tbl_type.Rows
If dr.RowState = DataRowState.Deleted OrElse dr.RowState = DataRowState.Detached Then Continue For
If dr.시설용도 = yongdo Then
If Pub.Program = EProgram.총량평가 Then
area += dr.면적
Else
area += dr.세대면적
End If
End If
Next
End If
tb_바닥면적.Text = area.ToString()
Calc_전체면적()
End Sub
End Class