2015. 4. 24. 16:11
C# with DataGridView
프로그램 설명
한 화면에 20개의 데이타를 보여주고, 페이지 번호가 있어서 각 페이지로 바로 이동 할 수 있는 예제입니다. 데이타는 데이타베이스에 10,000 개의 데이타를 임의로 입력하고 쿼리를 통해서 가져오는 방법입니다.
전체적인 로직은 System.ComponentModel.BindingList 를 이용해서, 전체 데이타를 가져오고 난 후에 각 페이지로 이동 할 때에 전체 데이타에서 해당하는 데이타 20개씩을 화면에 보여줍니다.
데이타베이스 화면
실행 화면
1. 첫화면 로딩이 마친 후
2. 페이지 이동을 13 페이지로 한 후
프로그램 작성
소스 파일안에 주석을 달아 놓았으니 확인 해 보시면 됩니다.
public partial class MainForm : Form { #region Initialize fields private int CurrentPage = 1; int PagesCount = 1; int PageRows = 20; BindingList<contacts> Baselist = null; BindingList<contacts> Templist = null; #endregion #region InitialIze MainForm() public MainForm() { InitializeComponent(); } ////// Call MainForm /// /// /// private void MainForm_Load(object sender, EventArgs e) { Baselist = FillDataforGrid(); PagesCount = Convert.ToInt32(Math.Ceiling(Baselist.Count * 1.0 / PageRows)); DataGridViewHeaderSetting(); CurrentPage = 1; RefreshPagination(); RebindGridForPageChange(); } ////// Get all contacts database data /// ///private BindingList<contacts> FillDataforGrid() { SQLOperator sdo = new SQLOperator("SampleDBConnectionString"); DataTable dt = sdo.ExecuteQuery(@"select Id, Name, BirthInfo, ZipCode, [Address], HomeTelephone, CompanyTelephone, Mobile, Company, convert(char(10), RegDate, 120) as RegDate from [dbo].[tbl_contacts]"); BindingList<contacts> pContact = new BindingList<contacts>(); if (dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { pContact.Add(new Contacts() { Idx = Convert.ToInt32(row["Id"]), Name = row["Name"].ToString(), BirthInfo = row["BirthInfo"].ToString(), ZipCode = row["ZipCode"].ToString(), Address = row["Address"].ToString(), HomeTelephone = row["HomeTelephone"].ToString(), CompanyTelephone = row["CompanyTelephone"].ToString(), Mobile = row["Mobile"].ToString(), Company = row["Company"].ToString(), RegDate = row["RegDate"].ToString() }); } } return pContact; } #endregion #region Button Events /// /// Exit button /// /// /// private void exitToolStripMenuItem_Click(object sender, EventArgs e) { if(MessageBox.Show(Properties.Resources.TerminateConfirmMsg, "확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes ) this.Close(); } ////// ToolstripButton(처음으로, 앞으로, 1, 2, 3, 4, 5, 뒤로, 마지막으로) /// /// /// private void ToolStripButtonClick(object sender, EventArgs e) { try { ToolStripButton ToolStripButton = ((ToolStripButton)sender); //Determining the current page if (ToolStripButton == btnBackward) CurrentPage--; else if (ToolStripButton == btnForward) CurrentPage++; else if (ToolStripButton == btnLast) CurrentPage = PagesCount; else if (ToolStripButton == btnFirst) CurrentPage = 1; else CurrentPage = Convert.ToInt32(ToolStripButton.Text, CultureInfo.InvariantCulture); if (CurrentPage < 1) CurrentPage = 1; else if (CurrentPage > PagesCount) CurrentPage = PagesCount; //Rebind the Datagridview with the data. RebindGridForPageChange(); //Change the pagiantions buttons according to page number RefreshPagination(); } catch (Exception) { } } #endregion #region Page setting private void RefreshPagination() { ToolStripButton[] items = new ToolStripButton[] { toolStripButton1, toolStripButton2, toolStripButton3, toolStripButton4, toolStripButton5 }; //pageStartIndex contains the first button number of pagination. int pageStartIndex = 1; if (PagesCount > 5 && CurrentPage > 2) pageStartIndex = CurrentPage - 2; if (PagesCount > 5 && CurrentPage > PagesCount - 2) pageStartIndex = PagesCount - 4; for (int i = pageStartIndex; i < pageStartIndex + 5; i++) { if (i > PagesCount) { items[i - pageStartIndex].Visible = false; } else { //Changing the page numbers items[i - pageStartIndex].Text = i.ToString(CultureInfo.InvariantCulture); //Setting the Appearance of the page number buttons if (i == CurrentPage) { items[i - pageStartIndex].BackColor = Color.Black; items[i - pageStartIndex].ForeColor = Color.White; } else { items[i - pageStartIndex].BackColor = Color.White; items[i - pageStartIndex].ForeColor = Color.Black; } } } //Enabling or Disalbing pagination first, last, previous , next buttons if (CurrentPage == 1) btnBackward.Enabled = btnFirst.Enabled = false; else btnBackward.Enabled = btnFirst.Enabled = true; if (CurrentPage == PagesCount) btnForward.Enabled = btnLast.Enabled = false; else btnForward.Enabled = btnLast.Enabled = true; } #endregion #region Get data in current page private void RebindGridForPageChange() { //Rebinding the Datagridview with data int datasourcestartIndex = (CurrentPage - 1) * PageRows; Templist = new BindingList<contacts>(); for (int i = datasourcestartIndex; i < datasourcestartIndex + PageRows; i++) { if (i >= Baselist.Count) break; Templist.Add(Baselist[i]); } dataGridView1.DataSource = Templist; dataGridView1.Refresh(); } #endregion #region DataGridView Header Setting ////// Set DataGridView header text and property(text align, font size) /// private void DataGridViewHeaderSetting() { dataGridView1.AutoGenerateColumns = false; DataGridViewTextBoxColumn IdxColumn = new DataGridViewTextBoxColumn(); IdxColumn.DataPropertyName = "Idx"; IdxColumn.HeaderText = "No."; DataGridViewTextBoxColumn NameColumn = new DataGridViewTextBoxColumn(); NameColumn.DataPropertyName = "Name"; NameColumn.HeaderText = "이름"; DataGridViewTextBoxColumn BirthInfoColumn = new DataGridViewTextBoxColumn(); BirthInfoColumn.DataPropertyName = "BirthInfo"; BirthInfoColumn.HeaderText = "생년월일"; DataGridViewTextBoxColumn ZipCodeColumn = new DataGridViewTextBoxColumn(); ZipCodeColumn.DataPropertyName = "ZipCode"; ZipCodeColumn.HeaderText = "우편번호"; DataGridViewTextBoxColumn AddressColumn = new DataGridViewTextBoxColumn(); AddressColumn.DataPropertyName = "Address"; AddressColumn.HeaderText = "주 소"; DataGridViewTextBoxColumn HomeTelephoneColumn = new DataGridViewTextBoxColumn(); HomeTelephoneColumn.DataPropertyName = "HomeTelephone"; HomeTelephoneColumn.HeaderText = "집 전화번호"; DataGridViewTextBoxColumn CompanyTelephoneColumn = new DataGridViewTextBoxColumn(); CompanyTelephoneColumn.DataPropertyName = "CompanyTelephone"; CompanyTelephoneColumn.HeaderText = "회사 전화번호"; DataGridViewTextBoxColumn MobileColumn = new DataGridViewTextBoxColumn(); MobileColumn.DataPropertyName = "Mobile"; MobileColumn.HeaderText = "핸드폰번호"; DataGridViewTextBoxColumn CompanyColumn = new DataGridViewTextBoxColumn(); CompanyColumn.DataPropertyName = "Company"; CompanyColumn.HeaderText = "회사명"; DataGridViewTextBoxColumn RegDateColumn = new DataGridViewTextBoxColumn(); RegDateColumn.DataPropertyName = "RegDate"; RegDateColumn.HeaderText = "등록일"; dataGridView1.Columns.Add(IdxColumn); dataGridView1.Columns.Add(NameColumn); dataGridView1.Columns.Add(BirthInfoColumn); dataGridView1.Columns.Add(ZipCodeColumn); dataGridView1.Columns.Add(AddressColumn); dataGridView1.Columns.Add(HomeTelephoneColumn); dataGridView1.Columns.Add(CompanyTelephoneColumn); dataGridView1.Columns.Add(MobileColumn); dataGridView1.Columns.Add(CompanyColumn); dataGridView1.Columns.Add(RegDateColumn); foreach (DataGridViewColumn col in dataGridView1.Columns) { col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; col.HeaderCell.Style.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel); col.HeaderCell.Style.ForeColor = Color.White; // Set the column size automatically col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; } // Set the header column BackColor dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.DarkOrange; dataGridView1.EnableHeadersVisualStyles = false; } #endregion }
소스 파일 :
'C# with DataGridView' 카테고리의 다른 글
Column Sorting 이 있는 DataGridView (0) | 2015.04.27 |
---|---|
데이타베이스 4칙 연산(select, insert, delete, update) (0) | 2015.04.22 |
2015. 4. 22. 17:08
C# with DataGridView
프로그램 설명
DataGridView 의 datasource 와 List class를 이용하는 방법입니다.
데이타베이스 4칙 연산을 수행합니다.
Contacts class 는 아래와 같습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.Windows.Forms; using DataGridViewExample.lib; namespace DataGridViewExample.data { public class Contacts { #region Properties public int Idx { get; set; } public string Name { get; set; } public string BirthInfo { get; set; } public string ZipCode { get; set; } #endregion #region Functions ///// Add the contacts info /// ///public bool AddContacts() { bool retval = false; try { SQLOperator sdo = new SQLOperator("SampleDBConnectionString"); string query = @"insert into [dbo].[tbl_contacts](Name, BirthInfo, ZipCode) values(@Name, @BirthInfo, @ZipCode);"; sdo.ExecuteNoneQuery(query, new SqlParameter[] { new SqlParameter("@Name", Name), new SqlParameter("@BirthInfo", BirthInfo), new SqlParameter("@ZipCode", ZipCode) }, CommandType.Text); sdo.Dispose(); retval = true; } catch (SqlException se) { Trace.WriteLine(se.Message); retval = false; } catch(Exception ex) { Trace.WriteLine(ex.Message); retval = false; } return retval; } /// /// Modify the contacts info /// ///public bool ModifyContacts() { bool retval = false; try { SQLOperator sdo = new SQLOperator("SampleDBConnectionString"); string query = @"update [dbo].[tbl_contacts] set Name = @Name, BirthInfo = @BirthInfo, ZipCode = @ZipCode where Id = @Idx;"; sdo.ExecuteNoneQuery(query, new SqlParameter[] { new SqlParameter("@Name", Name), new SqlParameter("@BirthInfo", BirthInfo), new SqlParameter("@ZipCode", ZipCode), new SqlParameter("@Idx", Idx) }, CommandType.Text); sdo.Dispose(); retval = true; } catch (SqlException se) { Trace.WriteLine(se.Message); retval = false; } catch (Exception ex) { Trace.WriteLine(ex.Message); retval = false; } return retval; } public bool RemoveContacts() { bool retval = false; try { SQLOperator sdo = new SQLOperator("SampleDBConnectionString"); string query = @"delete from [dbo].[tbl_contacts] where Id = @Idx;"; sdo.ExecuteNoneQuery(query, new SqlParameter[] { new SqlParameter("@Idx", Idx) }, CommandType.Text); sdo.Dispose(); retval = true; } catch (SqlException se) { Trace.WriteLine(se.Message); retval = false; } catch (Exception ex) { Trace.WriteLine(ex.Message); retval = false; } return retval; } #endregion } }
실행 화면
소스 파일
'C# with DataGridView' 카테고리의 다른 글
Column Sorting 이 있는 DataGridView (0) | 2015.04.27 |
---|---|
페이지 나누기가 있는 DataGridView (0) | 2015.04.24 |