Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Tạo UserControl kế thừa từ DatagridView như thế nào ?

  1. #1
    Ngày gia nhập
    09 2011
    Nơi ở
    Hải Dương
    Bài viết
    7

    Mặc định Tạo UserControl kế thừa từ DatagridView như thế nào ?

    M tạo 1 UserControl kế thừa từ điều khiển DataGridView. ở phương thức khởi tạo m add vào 1 cột.
    vd: this.Columns.Add("cl1","Cot1");
    rồi kéo User vào form khi chạy lên nó thành 2 cột.
    Bạn nào biết tại sao giúp m với. và làm thế nào để nó chỉ còn 1 cột. (Viết code)

  2. #2
    Ngày gia nhập
    09 2011
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    37

    Để mình giúp bạn ^^. Xem code sau đây nha:

    UserControl:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class MyDataGridView : DataGridView
        {
            public MyDataGridView()
            {
                this.Columns.Add("bt", "Bo tay");
            }
        }
    }
    Form1: chả có code gì khác thường trong đây cả

    Code:
    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        }
    }
    Form1.Designer.cs: cái này mới quan trọng

    Code:
    namespace WindowsFormsApplication1
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.myDataGridView1 = new WindowsFormsApplication1.MyDataGridView();
                this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
                ((System.ComponentModel.ISupportInitialize)(this.myDataGridView1)).BeginInit();
                this.SuspendLayout();
                // 
                // myDataGridView1
                // 
                this.myDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                this.myDataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                this.dataGridViewTextBoxColumn1});
                this.myDataGridView1.Location = new System.Drawing.Point(13, 13);
                this.myDataGridView1.Name = "myDataGridView1";
                this.myDataGridView1.Size = new System.Drawing.Size(240, 150);
                this.myDataGridView1.TabIndex = 0;
                // 
                // dataGridViewTextBoxColumn1
                // 
                this.dataGridViewTextBoxColumn1.HeaderText = "Bo tay";
                this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(284, 262);
                this.Controls.Add(this.myDataGridView1);
                this.Name = "Form1";
                this.Text = "Form1";
                ((System.ComponentModel.ISupportInitialize)(this.myDataGridView1)).EndInit();
                this.ResumeLayout(false);
    
            }
    
            #endregion
    
            private MyDataGridView myDataGridView1;
            private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
        }
    }
    Chú ý những đoạn code màu đỏ.

    Những đoạn này là do Visual Studio tự sinh ra khi ở design mode.
    Vì không biết phải giải thích thế nào, nhưng có thể thấy là do cách viết UserControl của mình mà sinh ra tình trạng này.

    Lời khuyên ở đây là nên tạo thêm một hàm khác để thêm các column cần thiết vào, không nên để trong Constructor của UserControl.
    Đã được chỉnh sửa lần cuối bởi haiduong87 : 18-09-2011 lúc 10:33 AM.
    p/s: ta là gấu

  3. #3
    Ngày gia nhập
    09 2011
    Nơi ở
    Hải Dương
    Bài viết
    7

    Cảm ơn bạn nhiều. mình đã hiểu tại sao nó thành 2 cột. nhưng làm thế nào để nó chỉ còn 1 cột vậy bạn.
    đây là bài tập thầy giáo m cho. chứ m cũng không muốn viết nó ở hàm Constructor.

  4. #4
    Ngày gia nhập
    09 2011
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    37

    Có nhiều cách để làm
    + Xóa mấy đoạn code đỏ đi
    + Tạo phương thức add colum cho usercontrol của mình
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Windows.Forms;
    6.  
    7. namespace WindowsFormsApplication1
    8. {
    9.     public class MyDataGridView : DataGridView
    10.     {
    11.         public MyDataGridView()
    12.         {
    13.         }
    14.  
    15.         public void AddMyColumn()
    16.         {
    17.             this.Columns.Add("bt", "Bo tay");
    18.         }
    19.     }
    20. }

    Visual C# Code:
    1. using System;
    2. using System.ComponentModel;
    3. using System.Data;
    4. using System.Drawing;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Windows.Forms;
    8.  
    9. namespace WindowsFormsApplication1
    10. {
    11.     public partial class Form1 : Form
    12.     {
    13.         public Form1()
    14.         {
    15.             InitializeComponent();
    16.             myDataGridView1.AddMyColumn();
    17.         }
    18.     }
    19. }
    + Hoặc đơn giản hơn thì làm thế này:
    Visual C# Code:
    1. using System;
    2. using System.ComponentModel;
    3. using System.Data;
    4. using System.Drawing;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Windows.Forms;
    8.  
    9. namespace WindowsFormsApplication1
    10. {
    11.     public partial class Form1 : Form
    12.     {
    13.         public Form1()
    14.         {
    15.             InitializeComponent();
    16.             myDataGridView1.Columns.Add("bt", "Bo tay");
    17.         }
    18.     }
    19. }
    Nhưng mà mục đích của bài tập là gì mới được
    p/s: ta là gấu

  5. #5
    Ngày gia nhập
    09 2011
    Nơi ở
    Hải Dương
    Bài viết
    7

    Sao m làm không được nhỉ. Xóa code phần chữ màu đỏ đi thì nó báo lỗi. Làm theo cách thứ 1 thì ở form không gọi được phương thức AddMyColumn(). Làm theo cách t2 thì viết myDataGridView. nó không có thuộc tính columns.
    mục đích của bài tập là cho usercontrol nó không bị nhân đôi số cột nên nữa.

  6. #6
    Ngày gia nhập
    09 2011
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    37

    Mặc định Tạo UserControl kế thừa từ DatagridView như thế nào ?

    Hi bạn,
    + Đối với cách đầu thì bạn xem lại bài của mình ở trên, mình bôi đỏ thừa 1 dòng.
    + Còn cách 2 và 3 thì mình test chạy bình thường
    Bạn xem lại thử nhé
    p/s: ta là gấu

  7. #7
    Ngày gia nhập
    09 2011
    Nơi ở
    Hải Dương
    Bài viết
    7

    m làm được cả 3 cách rùi. cảm ơn bạn nhiều nhiều na

  8. #8
    Ngày gia nhập
    09 2011
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    37

    Cập nhật tí. Vấn đề này khá hay, nên mình đã đi hỏi trên MSDN, được cao nhân khác chỉ cách giải quyết triệt để. Thêm cái attribute vào là ok .
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Windows.Forms;
    5. using System.ComponentModel;
    6. using System.ComponentModel.Design;
    7.  
    8. namespace WindowsApplication1
    9. {
    10.     [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
    11.     public class MyDataGridView : DataGridView
    12.     {
    13.         public MyDataGridView()
    14.         {
    15.             this.Columns.Add("bt", "Bo tay");
    16.         }
    17.     }
    18. }

    Chắc có nhiều ngưới sẽ cần cái này
    p/s: ta là gấu

  9. #9
    Ngày gia nhập
    09 2011
    Bài viết
    23

    cái này trước khi hỏi nên lên google xem thé nào đã, chứ cái baics này đơn giản mà

Các đề tài tương tự

  1. Graphic Cách set bakground cho usercontrol như thế nào để hiển thị được trên Form
    Gửi bởi sirou9x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 21-06-2012, 10:15 PM
  2. Làm sao để 2 usercontrol có thể nhìn thấy nhau
    Gửi bởi khanhduy.8hpm trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 18-04-2012, 12:44 PM
  3. Add usercontrol vào toolbox như thế nào?
    Gửi bởi prt_awm trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 10-09-2011, 06:28 PM
  4. Truyền dữ liệu giữa 2 Usercontrol trong C# như thế nào?
    Gửi bởi meomeomeo trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 08-06-2010, 11:23 AM
  5. Cách dùng usercontrol trên C# như thế nào?
    Gửi bởi meocontaplamC trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 11-05-2009, 06:06 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn