본문 바로가기

c#

(30)
wpf MVVM ICommand 버튼 비활성화 활성화 wpf의 mvvm 패턴을 활용한 버튼 활성화 비활성화 로직을 만들어 보겠습니다. 우선 MVVM패턴이기 때문에 view viewmodel 로 구분하겠습니다. view viewModel using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; namespace WpfApp1 { class MainVM { //데이터가 들어갈 생성자 public ObservableCollection MainList { get; set; } = new ObservableCollection(); //버튼 command 바인딩 객체 public Relaycommand ButtonCommand {get; ..
C# 오류 'System.Windows.ResourceDictionary' 형식의 개체를 만들 수 없습니다. 원인 분석 윈도우에서 KB5021233 , KB5020872에 대한 보안 업데이트를 한 뒤로 System.Windows.Markup.XamlParseException: ''System.Windows.ResourceDictionary' 형식의 개체를 만들 수 없습니다. CreateInstance에 실패했으며 이는 'System.Windows.ResourceDictionary'에 대한 공용 기본 생성자가 없기 때문일 수 있습니다. 1 줄 200 위치의 개체 'System.Windows.Documents.FixedPage'에서 오류가 발생했습니다.' 위와 같은 오류가 뜨기 시작 했습니다. 아래는 해당 오류를 분석한 내용입니다. 에러가 나는 로직은 wpf의 flowdocument라는 형식을 xps문서로 변경한뒤 해당 xp..
WPF 디자인 패턴 mvvm패턴 viewmodel? view? MVVM 패턴은 VIEW VIEWMODEL MODEL로 구분이 되어있는 디자인 패턴입니다. 1.View view는 ui에 관한 로직을 포함합니다. 즉 사용자가 화면에서 보는 것들에 관한 로직만을 담는것을 원칙으로 합니다. wpf에서는 initializecomponent메서드를 호출하는 생성자만 호출하는 것이 이상적으로는 바람직합니다. 단 코드비하인드에는 xaml에서 표현하기 어렵거나 view모델에서 바인딩하는것을 구현하기 어렵거나 비효율적인 ui에 관한 로직을 포함 합니다. view는 datacontext를 통해 view model을 참조합니다. 2.View model 뷰모델은 프리젠 테이션 로직을 포함 합니다. view에 대한 직접적인 참조를 가지고 있으면 안됩니다. view가 바인드 할수 있는 프라퍼..
C# 데이터베이스 연결 하는 법 SqlDataReader SqlDataAdapter 차이점 1.Connection 연결은 SqlConnection 객체를 생성해서 ConnectionString에 서버의 정보를 입력 하면됩니다. 이때 MSSQLSERVER는 정해진 형식대로 입력 하면 됩니다. DataSource:서버 아이피 (또는 서버명) Initial Catalog :database이름 UserID 계정 명 Password 비밀번호 예시)DataSource =111.111.1.10,1223;Initial Catalog =dbname;User ID= 홍길동; Password = 1324; 2.open 데이터 베이스를 .open()하여 접속 3.SqlCommand 를 통한 명령어 전송 4.SqlDataReader 를 통한 객체 반환 여기서 SqlDataReader를 통한 객체 반환 방식은 db와 ..
c# dataGridview combobox 추가 하는 법 combobox ComboBox_SelectedIndexChanged 이벤트 추가 c# winform에서 gridview의 셀 안에 콤보박스를 넣는 예제입니다! 아래의 과목이라는 컬럼에 콤보박스를 넣어 선택 했을때 메세지 박스를 띄우는 이벤트도 추가했습니다. 콤보박스안의 item들을 선택할때 발생하는 이벤트핸들러를 추가하여 콤보박스 변경 이벤트가 발생했을 때의 로직도 구현 할 수 있습니다. public Form1() { InitializeComponent(); MakeComboGrid(); } private void MakeComboGrid() { DataGridViewComboBoxCell cbocell = new DataGridViewComboBoxCell(); cbocell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; i..
c#기초 Extension 확장 메서드 Extension Method 확장 메서드는 static(정적) 메서드의 한 종류입니다. 단 말 그대로 확장의 의미를 가지고 있는 신기한 기능입니다. 확장 메서드는 다른 클래스나 구조체 인터페이스에 적용 될수 있습니다. 위는 확장 메서드를 선언한 static클래스 확장메서드를 사용하기 위해서는 클래스 또한 정적으로 선언 해줘야 사용 가능합니다. 또한 첫번째 파라미터의 타입은 확장메서드를 사용 할 수 있는 타입으로 지정됩니다. 위 코드는 string클래스에 확장메서드 Hello를 추가하여 string 객체에서 Hello라는 메서드를 사용 가능하게끔 만들어 줍니다. 위의 코드를 실행하면 아래와 같이 Hello 확장 메서드 안의 로직이 실행되어 출력됩니다. 또한 뒤의 파라미터에 this를 붙이면 아래와 같이 에러가 떠 컴파일이 되지 않습니..
c# DataTable 복사하기 복제하기 copy() 메서드와 clone() 메서드 C# 의 DataTable 클래스는 복제 기능과 복사 기능을 제공합니다. 아래는 그 메서드를 활용하는 예제 코드입니다. static void Main(string[] args) { DataTable dt = new DataTable(); //데이터 테이블 생성 DataTable dtcopy = new DataTable(); //복사할 데이터 테이블 생성 DataTable dtclone = new DataTable(); //복제할 데이터 테이블 생성 dt.Columns.Add("NAME",typeof(string)); dt.Columns.Add("NUMBER", typeof(int)); dt.Columns.Add("DOUBLE", typeof(double)); dt.Rows.Add("테스트","243","..
c# visualstudio 메타데이터 파일을 찾을 수 없습니다 오류 해결 visual studio에서 위와 같이 솔루션을 빌드하면 메타데이터 파일을 찾을 수 없습니다. 이런 항목이 뜹니다 구글링 해봐서 나와있는 조치를 다 따라해 봤으나 똑같이 동일하게 오류가 뜨는 상황이어서 포기하려 했으나 위의 경로를 똑같이 따라가 보니 빌드하면 생성되어야 할 dll 파일들이 하나도 없는 것을 발견하였습니다. 예전에 컴파일 해둔 압축파일이 있어서 해당 폴더에 압축해제 하고 다시 빌드 하였더니 정상적으로 빌드가 되었습니다. 저의 경우에는 메타데이터가 없다는 경로에 예전에 압축해둔 해당 dll들을 넣어주어서 해결 하였습니다.
c# system.applicationexception: error opening file---> system.applicationexception: error verifying file --->system.unauthorizedaccessexception: ~~경로에 대한 액세스가 거부되었습니다. 서버에 있는 엑셀파일을 열려고 했으나 system.applicationexception: error opening file ---> system.applicationexception: error verifying file ---> system.unauthorizedaccessexception:~ 경로에 대한 액세스가 거부되었습니다. 위치: system.io.__error.winioerror(int32 errorcode, string maybefullpath) 위치: system.io.filestream.init(string path, filemode mode, fileaccess access~~~ 대충 위의 오류가 떠서 뭐가 문제인지 찾아봤다. 파일의 경로에 대한 엑세스가 불가하여 생기는 줄 알고 권한을..
c# InsertAt 이란? DataRowCollection의 InserAt은 DataRowCollection에 있으므로 DataRow속성을 가진 개체에서만 사용할수 있다. DataTable dt = new DataTable(); dt.InsertAt(x) DataRow 속성이 없기 때문에 불가능 dt.Rows.InsertAt(O) DataRow 속성을 가지므로 가능 // // 요약: // 컬렉션의 지정한 위치에 새 행을 삽입합니다. // // 매개 변수: // row: // 추가할 System.Data.DataRow입니다. // // pos: // 컬렉션에서 DataRow를 추가하려는 위치입니다. public void InsertAt(DataRow row, int pos); 메타데이터의 요약을 보니 위처럼 정리가 깔끔하게 되어있었..