Hiển thị các bài đăng có nhãn Winform. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Winform. Hiển thị tất cả bài đăng

Thứ Hai, 10 tháng 9, 2018

Published tháng 9 10, 2018 by Nặc danh with 0 comment

Chia Sẻ Khóa Học Lập Trình Winform Nâng Cao Với C#: 10 Ứng Dụng





Khóa học cung cấp trọn bộ kiến thức nâng cao của lập trình C# , các bạn có thể tạo ra một ứng dụng C# hoàn chỉnh sau khi hoàn thành khóa học.

Khóa cung cấp những cơ hội thực hành tạo ứng dụng C# ngay trong quá trình học

Sau khi hoàn thành khóa học, có thể xin việc vào các công ty sử dụng công nghệ .Net

Khóa họ̣c sử dụng những công cụ, Framework
Read More
      edit

Thứ Ba, 25 tháng 11, 2014

Published tháng 11 25, 2014 by Admin with 0 comment

Phân trang trong winform

 

Phân trang trong winform - Paging in winform. Hướng dẫn chi tiết + Source code

Phân trang trong web là 1 phương pháp được sử dụng rất phổ biến. Nhưng phân trang trong winform thì thế nào? Đó là ý tưởng hay mà chính mình, rất nhiều sinh viên và nhiều người lập trình không hề hay ít khi nghĩ tới. Mình xin tut bài này để cho mọi người có thể tham khảo, trao đổi. Có gì sai sót mong các bạn cứ thẳng thắn cho ý kiến.

Ý tưởng:
- Thay vì load tất cả các dòng (record) để đưa ra lưới, thì chúng ta chỉ thực hiện đếm số dòng để phân trang.
- Số trang sẽ được add vào 1 combobox.
- Thông tin của trang đó sẽ được lấy về bằng 1 câu lệnh truy vấn thông qua sự kiến combo_selectIndexChange.

Thực hiện:

Bước 1: Tạo 1 Form gồm: 1 datagridView: đưa giá trị nhận được lên, 1 numberUpDown: chỉnh số dòng muốn hiển thị trên datagridView , 1 comboBox: lưu số trang và để thực hiện chuyển trang.

Bước 2: Khai báo các biến
        int currentPageIndex = 1;
        int pageSize = 17; //Số dòng hiển thị lên lưới
        int pageNumber = 0; //Số trang
        int fistRow, lastRow; //Dòng bắt đầu, dòng kết thúc cho việc truy vấn dữ liệu
        int rows; //Số dòng được trả về từ câu truy vấn trong formLoad
//SQL connection bạn thay đổi sao cho phù hợp với CSDL của mình, Mình chỉ post code thôi :D
        SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=QLSX;Integrated Security=True");

Bước 3: Trong sự kiện formLoad
private void Form1_Load(object sender, EventArgs e)
{
     string sql = "select count(*) as MaxNumber from KyHieuSo";//Đếm số dòng để phân trang, các bạn nhớ đổi KyHieuSo thành tên bảng phù hợp nha
     SqlCommand cmd = new SqlCommand(sql, conn);
     conn.Open();
     rows = Convert.ToInt32(cmd.ExecuteScalar()); //Số dòng nhận được
     pageTotal();
     conn.Close();
 }

Bước 4: Tạo hàm PageTotal đển phân trang và add số trang vào comboBox
void pageTotal()
{
    pageNumber = rows % pageSize != 0 ? rows / pageSize + 1 : rows / pageSize;
    label3.Text = " / " + pageNumber.ToString();
    cmbPage.Items.Clear();
    for (int i = 1; i < pageNumber; i++)
    {
        cmbPage.Items.Add(i + "");
    }
    cmbPage.SelectedIndex = 0;
}

Bước 5: Khi click chọn trang thì thực hiện câu lệnh truy vấn
  private void cmbPage_SelectedIndexChanged(object sender, EventArgs e)
  {
      currentPageIndex = Convert.ToInt32(cmbPage.Text);
      fistRow = pageSize * (currentPageIndex - 1); //Dong dau
      lastRow = pageSize * (currentPageIndex);//Dong cuoi cua 1 trang duoc chon.
      //MessageBox.Show(fistRow + " " + lastRow);
      string sql = "select Row_number() over(order by KyHieu) STT, * from KyHieuSo";
      SqlDataAdapter da = new SqlDataAdapter(sql, conn);
      DataSet ds = new DataSet();
      da.Fill(ds, fistRow, pageSize, "KyHieuSo");
      dataGridView1.DataSource = ds.Tables[0];
  }

Thế là xong! Nếu bạn chưa tin, hãy bật TaskManager lên để so sánh dung lượng chiếm dụng bộ nhớ của phần mềm chưa phân trang và phần mềm đã phân trang, dung lượng của chương trình đã phân trang giảm đi rất nhiều (thời gian nhanh hơn hay không thì mình chưa test kĩ, hi)

(Chú ý: đây là chương trình có tính minh họa, vì vậy các bạn phải đổi đường dẫn CSDL...)
Read More
      edit