Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hướng dẫn Thao tác cơ bản (Thêm, Xóa, Sửa) với GridControl của DevExpress

    10h14 ' ngày 1/11/2011 . Mất hơn 15' để chuẩn bị cho các bạn cái này. Tâm huyết lắm đó nhé. Xem xong thấy thích thì tahnk tui cái:@:@:@
    Dô:

    Đầu tiên bạn làm theo các bước trong video sau để tạo ra cái Gridcontrol như mong muốn nhé[IMG]images/smilies/biggrin.png[/IMG]




    Sau khi đã có GridControl như trong Video.
    + Tạo ra 1 Datatable đặt tên là dt và nó là biến toàn cục
    + Trong sự kiện FormLoad code

    Mã:
            private void SinhVien_Load(object sender, EventArgs e)        {                                  // khởi tạo cột cho Datatable đã khai báo ở trên            // Lưu ý tên cọt nhé: để gán FieldName của từng cột trên Grid cho chính xác            // nó phân biệt cả hoa thường đó nhé            dt.Columns.Add(new DataColumn("MaSV"));            dt.Columns.Add(new DataColumn("TenSV"));            dt.Columns.Add(new DataColumn("SDT"));            // Add du lieu vao dt            DataRow dr;            dr = dt.NewRow();            dr.BeginEdit();            dr["MaSV"] = "SV0001";            dr["TenSV"] = "Nguyen Van A";            dr["SDT"] = "123123";            dr.EndEdit();            dt.Rows.Add(dr);             dr = dt.NewRow();            dr.BeginEdit();            dr["MaSV"] = "SV0002";            dr["TenSV"] = "Nguyen Van B";            dr["SDT"] = "123122133";            dr.EndEdit();            dt.Rows.Add(dr);             dr = dt.NewRow();            dr.BeginEdit();            dr["MaSV"] = "SV0003";            dr["TenSV"] = "Nguyen Van C";            dr["SDT"] = "123112323";            dr.EndEdit();            dt.Rows.Add(dr);            // Gan dt va Gridcontrol            gridControl1.DataSource = dt;         }
    Bạn Chọn vào cái Gridview1 trong cái ô có chứa RunDessign mà mình vừa bấm vào đó.
    - chọn qua phần sự kiện(có cái dấu sấm sét đó) chọn các sự kiện sau và doubleClick vào các sự kiện đó
    *Trong code mình đã Cmment lại rồi đó
    1> gridView1_InvalidRowException và code như sau

    Mã:
            private void gridView1_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowException  EventArgs e)        {            // Sự kiện này để người ta không chuyển qua dòng khác được khi có lỗi xảy ra nè            // Nó nhận giá trị e.Valid của gridView1_ValidateRow để ứng xử            // neu e,Valid =True thì nó cho chuyển qua dòng khác hoặc làm tác vụ khác            // và ngược lại            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAc  tion;        }
    2>gridView1_ValidateRow Code như sau

    Mã:
            private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArg  s e)        {            string sErr = "";            bool bVali = true;            // kiem tra 3 cell cua mot dong dang Edit xem co rong ko?            // minh quen mat kí tự xuống dòng trong C# rồi:D bên VB là VbnewLine            if (gridView1.GetRowCellValue(e.RowHandle, "MaSV").ToString() == "")            {                bVali = false;                sErr = sErr + "Vui long dien Ma SV";            }            if (gridView1.GetRowCellValue(e.RowHandle, "TenSV").ToString() == "")            {                bVali = false;                sErr = sErr + "Vui long dien Ten Sinh Vien";            }            if (gridView1.GetRowCellValue(e.RowHandle, "SDT").ToString() == "")            {                bVali = false;                sErr = sErr + "Vui long dien So dien thoai";            }            if (bVali)            {                // neu khong rỗng thì bụp cái này ra màn hình                if (e.RowHandle < 0)// Đây là thêm mới nè:D                {                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "MaSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "TenSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "SDT").ToString(), "");                    XtraMessageBox.Show("Day la them moi nhe");                    // Insert to DB                }                else                {                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "MaSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "TenSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(e.Ro  wHandle, "SDT").ToString(), "");                    XtraMessageBox.Show("Day la Update nhe");                    // Update to DB                }            }            else            {                 e.Valid = false;                // coi như valid không qua được. bạn sẽ không làm được gì trừ khi                //điền thêm thông tin hoặc bấm nút ESC trên bàn phím                XtraMessageBox.Show(sErr ,"Error!!!");            }                    }
    - Tiếp theo chọn Cái GridControl và chọn sự kiện sau
    Chú ý phân biệt giữa cái GridView1 và cái GridControl1 nhé[IMG]images/smilies/biggrin.png[/IMG]
    gridControl1_ProcessGridKey Code như sau ()

    Mã:
            private void gridControl1_ProcessGridKey(object sender, KeyEventArgs e)        {            // kiểm tra xem có phải người dùng bấm nút xóa trên bàn phím            // Và trạng thái của Gridcontrol có không phải là đang edit không (tránh            // tình trạng người dùng đang focus để sửa 1 cell nào trong Grid view )            if (e.KeyCode==Keys.Delete &&  gridView1.State != DevExpress.XtraGrid.Views.Grid.GridState.Editing )            {                if (XtraMessageBox.Show("Are you sure?", "Quest", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)                {                    XtraMessageBox.Show(gridView1.GetRowCellValue(grid  View1.FocusedRowHandle , "MaSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(grid  View1.FocusedRowHandle, "TenSV").ToString(), "");                    XtraMessageBox.Show(gridView1.GetRowCellValue(grid  View1.FocusedRowHandle, "SDT").ToString(), "");                    dt.Rows.RemoveAt(gridView1.FocusedRowHandle);                }            }        }
    Rồi cuối cùng là hưởng thành quả thôi[IMG]images/smilies/biggrin.png[/IMG]

    Em không biết đưa cái Code vào Tag của C#. Bác nào sửa giùm em cho dễ đọc. Thank nhiều

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bài viết hay làm tk bạn nghe, mong rằng sẽ có nhìu bàn viết hay hơn nửa :d

  3. #3
    Trích dẫn Gửi bởi elkidvnn1
    10h14 ' ngày 1/11/2011 . Mất hơn 15' để chuẩn bị cho các bạn cái này. Tâm huyết lắm đó nhé. Xem xong thấy thích thì tahnk tui cái:@:@:@
    Em không biết đưa cái Code vào Tag của C#. Bác nào sửa giùm em cho dễ đọc. Thank nhiều
    Xin chào bạn
    Bạn xem giúp mình code này với nhé .
    Mình viết trên VB.net và CSDL là access
    Mình đọc bài của bạn và mình đã làm theo được đến bước không không cho người dùng thoát ra khỏi Row nếu còn trống dữ liệu.
    Nhưng mình không thể updata nó vào csdl dc.
    Mình viết code như sau.
    Mã:
      Dim cnn As New OleDbConnection, da As OleDbDataAdapter, dt As DataTable, bs As New BindingSource, cb As OleDbCommandBuilder
    
        Sub KetNoi1()
            Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data/datakhangviet.mdb;Persist Security Info=True;Jet OLEDB:Database Password=quendi"
            Try
                cnn = New OleDbConnection(str)
                cnn.Open()
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Exclamation)
                cnn.Close()
                Exit Sub
            End Try
        End Sub
        Sub nguon()
            On Error Resume Next
            If cnn.State = ConnectionState.Closed Then
                KetNoi1()
            End If
            dt = New DataTable
            da = New OleDbDataAdapter("select * from T_danhmuchanghoa", cnn)
            da.Fill(dt)
            hienthi.DataSource = dt
            dt.Dispose()
            da.Dispose()
            cnn.Close()
        End Sub
    
    Private Sub chitiet_InvalidRowException(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs) Handles chitiet.InvalidRowException
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction
        End Sub
    
        Private Sub chitiet_ValidateRow(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs) Handles chitiet.ValidateRow
            Dim sErr As String = ""
            Dim bVali As Boolean = True
            ' kiem tra 2 cell cua mot dong dang Edit xem co rong ko?
            ' minh quen mat kí tự xuống dòng trong C# rồi:D bên VB là VbnewLine
            If chitiet.GetRowCellValue(e.RowHandle, "mahang").ToString() = "" Then
                bVali = False
                sErr = sErr & "Vui long dien Ma hàng"
            End If
            If chitiet.GetRowCellValue(e.RowHandle, "tenhang").ToString() = "" Then
                bVali = False
                sErr = sErr & "Vui long dien Ten hàng"
            End If
            
            If bVali Then
                'Nếu đạt được yêu cầu không được tróng thì thực hiện update hay Insert ở đây
                If cnn.State = ConnectionState.Closed Then
                    KetNoi1()
                End If
                da = New OleDbDataAdapter("select * from T_danhmuchanghoa", cnn)
                da.Fill(dt)
                cb = New OleDbCommandBuilder(da)
                da.Update(dt)
                dt.AcceptChanges()
                dt.Clear()
                dt.Dispose()
                da.Dispose()
                cnn.Close()
                nguon()
            Else
    
                e.Valid = False
                ' coi như valid không qua được. bạn sẽ không làm được gì trừ khi
                'điền thêm thông tin hoặc bấm nút ESC trên bàn phím
                MsgBox("Mã hàng và tên hàng không được bỏ trống, Lổi do bạn chưa nhập mã hàng hoăc tên hàng!")
            End If
        End Sub
    -Khi mình sửa hay nhập vào dòng "Thêm mới" trên lưới thì nó ko cập nhật xuống CSDl đc.
    Bạn xem giúp mình với , Xin chân thành cảm ơn bạn.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn ơi giúp mình tý.
    Không hiểu thiếu bước nào trong thiết kế gridview mà khi mình click vào ô tiếp theo để nhập thì giá trị ở cái ô trước nó mất luôn

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •